当我发现我的错误的远程分支的错误,我总是删除它,在本地挤压并再次推送。因为我听说 'git push -f' 很危险。但是我注意到在 git fetch 之后显示的推送结果如下所示。
新的 BRANCH_NAME “(强制)”
我的工作流程删除并再次推送是否正确?方式和'push -f'有什么不同?
当我发现我的错误的远程分支的错误,我总是删除它,在本地挤压并再次推送。因为我听说 'git push -f' 很危险。但是我注意到在 git fetch 之后显示的推送结果如下所示。
新的 BRANCH_NAME “(强制)”
我的工作流程删除并再次推送是否正确?方式和'push -f'有什么不同?
从功能上讲,删除并再次推送至少与git push -f
.
但是,再次删除和推送实际上比git -f push
出于一个非常具体的原因更糟糕:
至少git -f push
,替换是原子的。
虽然,当你独自工作时,这没什么大不了的。
git -f push
,您会被告知在结果消息中发生了哪些替换:X...Y branch ->
branch (forced update)
. 从那里,您可以确定X
真正要吹走的意思。git push origin :branch && git push origin branch
,如果您绝对不是唯一可能推送的人,您将无法真正说出您删除的内容branch
。不,首先删除远程分支不会使其更安全或任何事情。
强制推送危险的原因是工作流程原因,而不是技术原因。如果有人拉了你的错误分支,那么你强制推送分支上的正确更改集,这可能会对他们的历史以及他们在分支顶部所做的任何更改造成严重破坏,因为他们的拉动将不再快进(除非他们修复他们错误的分支通过强制拉动或如果他们重新调整他们的更改),这可能意味着他们可能会再次重新引入错误的更改。在一个只有一个提交者的团队中,这通常不是什么大问题,对于较大的项目,有很多提交者和很多观察者,那么问题的可能性就会大得多,因为可能不仅仅是一两个人已经下载了错误的分支。