为了补充previous answer,并解决强制执行git push
可能会破坏其他贡献者本地仓库的问题,即将在2013年第四季度发布的Git 1.8.5中将会增加一个新选项:
git push --force-with-lease
查看此线程中该选项的来源:
如果在您获取以检查它为目的而强制或删除的分支的'origin
'时发生了什么,您可能会丢失其他人的工作。
不知道倒回和重建分支决定的人可能会尝试在您获取并重新安排它的时间与您推送以替换重建结果的时间之间向分支推送。
我们可以通过可选允许用户告诉“git push
”这一点来使这些推送更加安全
:
我正在强制/删除,基于'branch'的值仍然在此对象上的假设。
如果该假设不再成立,即如果自我准备此推送以来分支发生了某些变化,请不要继续并失败此推送。
你可以查看
commit 28f5d17中
--force-with-lease
的完整文档。
--force-with-lease
将保护要更新的所有远程引用,要求它们的当前值与某些合理的默认值相同(除非另有说明);
目前,“某些合理的默认值”被初步定义为“我们为正在更新的远程引用的引用拥有的远程跟踪分支的值”,如果我们没有这样的远程跟踪分支,则会出现错误。
这解释了该选项中“租赁”部分的含义:
"force-with-lease
": 当您获取信息以决定变基历史记录时,您假设已经对引用进行过租赁,并且只有在租约未被打破时才能回推。
这已经在测试中,并在 "
Git.git中有什么新动向(2013年8月,#07;星期三,28日)" 中提到:
顺便提一下,使用覆盖通常的“必须快进”的推送是使用在“next”分支上开发的“force-with-lease”选项完成的,如下所示:
$ 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
的参考状态报告
--force--with-lease
推送选项比--force
提供了较少的状态信息。
特别是,即使进行了强制更新,输出也表明参考已快进。
注意那个选项被忽略或绕过的情况,如在Git 2.13(2017年第二季度)中解释。
git push --force
命令。请参见下面的我的新答案。 - VonC