网站首页 > 精选文章 正文
目前所知,使用 repo sync 同步远端服务器代码,不能强制覆盖本地修改。如果想要强制覆盖本地修改,可以用 repo forall -c 来执行git丢弃本地修改的命令,git checkout 和 git reset 命令都可以丢弃本地修改。
一般来说,可以使用 git checkout . 命令来丢弃当前目录下的改动,但是实际执行 repo forall -c git checkout . 命令会报错:
$ repo forall -c git checkout . error: pathspec '.' did not match any file(s) known to git.
而使用 repo forall -c 'git reset --hard' 命令不会报错,可以用这个命令来丢弃所有git仓库的本地改动,然后再用 repo sync 命令来同步远端服务器代码。
在实际项目开发时,可能会在本地创建开发分支,这个分支没有关连到服务器分支。我们同步远端服务器代码,可能只是想获取到最新代码。此时,并不想丢弃本地开发分支的改动。但是上面的 repo forall -c 'git reset --hard' 命令无法区分这种情况,会丢弃开发分支的改动。
下面这个看起来很复杂的命令就用于解决这个问题,它先判断当前本地分支在远端服务器存在同名分支时,才强制覆盖本地修改并pull服务器代码:
repo forall -c "branch_name=$(git rev-parse --abbrev-ref HEAD) && git rev-parse --abbrev-ref ${branch_name}@{upstream} && git reset --hard && git pull --stat --no-tags" |& cat
对这个命令的各个部分说明如下。
- repo forall -c:对所有git仓库都执行后面的跟着的命令,这里使用双引号把多个git命令都括起来,作为一个整体传给repo,可以做一些复杂的操作。
- branch_name=$(git rev-parse --abbrev-ref HEAD):这是bash shell的语法, $(cmd) 会执行 cmd 命令,得到它的输出,这里把输出结果赋值给 branch_name 变量。git rev-parse --abbrev-ref HEAD 命令输出且只输出本地分支名。
- &&:bash shell的与操作,前一个命令执行结果为true,才会执行下一个命令。
- git rev-parse --abbrev-ref ${branch_name}@{upstream}:${branch_name} 表示获取 branch_name 变量的值。branch_name 变量在前面被赋值为当前本地分支名。整个git命令获取本地分支在远端服务区分支名。如果获取不到,执行结果是false。
- git reset --hard:基于 && 操作符的特性,如果上一个git命令获取不到本地分支在远端服务器的分支名,就不会往下执行。所以执行到这里时,说明本地分支名跟远端服务器分支名相同,我们假设本地开发分支没有关连到远端服务器分支,那么当前分支就不是开发分支,用 git reset 丢弃本地修改。
- git pull --stat --no-tags:同步服务器代码,--stat 表示要打印发生改动的文件信息,--no-tags 表示不获取远端服务器仓库的tag信息。如果需要pull远端服务器的tag,可以不加 --no-tags 选项。
- |& cat:把整个repo命令的标准输出、错误输出都重定向到 cat 命令。如果不重定向,repo 会用 less 命令来显示输出内容,需要手动按q退出才会继续输出,重定向到 cat 后,直接打印全部输出内容,不需要再手动进行其他操作。
PS:这里用到了我之前文章介绍的 “Git获取本地分支对应的远端服务器分支名” 和 “Git打印且只打印本地分支名” 两个方法,来判断当前的开发分支是否存在于远端服务器,详细说明可以查看前面的文章。
猜你喜欢
- 2025-07-09 github上fork之后如何与原仓库代码同步
- 2025-07-09 代码性能优化之道——无分支编程(无代码编程软件)
- 2025-07-09 DeviceNet网络故障及排除方法(devicenet报警代码)
- 2025-07-09 告别冗长分支!策略模式让你的代码更优雅
- 2025-07-09 deepseek推荐:代码分支规范(代码分层设计)
- 2025-07-09 Git多分支协作实战:从分支策略到代码合并的全流程指南
- 07-09业内专家详解非法“挖矿”法律问题
- 07-09黑客最新目标:用你的电脑作比特币挖矿机
- 07-09拥有一台云服务器,可以做很多很酷的事情
- 07-09github上fork之后如何与原仓库代码同步
- 07-09Android repo技巧:强制同步远端服务器代码,但不覆盖开发分支
- 07-09代码性能优化之道——无分支编程(无代码编程软件)
- 07-09DeviceNet网络故障及排除方法(devicenet报警代码)
- 07-09告别冗长分支!策略模式让你的代码更优雅
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)