Git refspec中的+号有什么作用?非fast-forward更新是什么意思?
含义解释
首先给出原文的中文翻译:
+号的作用是告知 Git 即便引用更新不属于快进操作,也要强制更新该引用。
相关概念说明
- 快进(fast-forward)是 Git 默认的引用更新规则:当你要更新某个分支/引用的指向时,只有新指向的提交是当前引用指向提交的直系后代,Git 才会允许更新,否则会直接拒绝,避免意外覆盖其他人提交的代码。
- refspec 是 Git 用来映射本地仓库和远端仓库引用对应关系的配置规则,标准格式为
<源引用路径>:<目标引用路径>。
+ 号的具体作用
给 refspec 开头加上 + 后,相当于给当前这一条引用更新规则单独开了强制更新权限:
- 不需要符合快进条件也能完成引用更新,效果和在
git fetch/git push命令中加--force参数类似,但是只会作用于当前 refspec 指定的目标引用,不会全局生效,安全性更高。 - 最常见的场景是远端默认的 fetch 配置
+refs/heads/*:refs/remotes/origin/*,就是要求每次拉取时强制同步远端所有分支到本地的远程跟踪分支,哪怕远端分支被强制回退过,本地的远程跟踪分支也会同步更新,不会抛出非快进的报错。 - 手动操作时也可以直接使用,比如执行
git push origin +dev:dev,就只会强制更新远端的 dev 分支,不会影响其他分支的更新规则。
内容的提问来源于stack exchange,提问作者Snowcrash
相关产品推荐
相关产品推荐

