为了补充我之前的答案git push
,并解决强制可以真正搞砸其他贡献者的本地存储库的事实,git 1.8.5(即将到来的 2013 年第四季度)将看到一个新选项:
git push --force-with-lease
在此线程中查看该选项的来源:
origin
如果自从您提取检查它以来,您强制或删除的分支发生了某些事情,您最终可能会丢失其他人的工作。
不知道回退和重建分支的决定的人可能会尝试在您提取以重新定位它的时间和您推送以用重新定位的结果替换它的时间之间推送到分支。
我们可以make these pushes safer
选择允许用户告诉“ git push
”这个:
我正在强制/删除,基于“分支”的值仍然在这个对象上的假设。
如果该假设不再成立,即,如果自从我开始准备此推送以来分支发生了什么事,请不要继续并且使此推送失败。
--force-with-lease
您可以在提交 28f5d17中查看完整文档
--force-with-lease
除非另有说明,否则将通过要求它们的当前值与某个合理的默认值相同来保护所有将要更新的远程引用;
目前,“一些合理的默认值”暂时定义为“我们拥有的远程跟踪分支的值,用于更新远程的 ref”,如果我们没有这样的远程跟踪分支,则会出现错误。
这解释了该选项的“租赁”部分:
" force-with-lease
": 你假设你在取回时对 ref 进行了租约,以决定重新定位的历史应该是什么,并且只有在租约没有被破坏的情况下才能推回。
这已经在测试中,并在“ What's Cooking in git.git (Aug 2013, #07; Wed, 28) ”中提到:
顺便说一句,覆盖通常的“必须快进”的推送是使用force-with-lease
已经在烹饪中的“”选项完成的next
,如下所示:
$ git fetch ko next
$ anchor=$(git rev-parse --verify FETCH_HEAD)
$ for remote in ko repo gph github2
do
git push --force-with-lease=refs/heads/next:$anchor $remote next
done
注意:“ git push --force-with-lease
”已被教导报告是否需要强制(或快进)推送。
所以这个命令在 git 2.8(2016 年 3 月)的输出中更详细
推送:修复参考状态报告--force-with-lease
push 选项导致的--force--with-lease
状态信息不如--force
.
特别是,输出表明引用被快速转发,即使它被强制更新。
请注意该选项被忽略/绕过,如Git 2.13 (Q2 2017) 中所述。