' git push -f'之间的区别并且'删除远程分支并再次推送'

时间:2013-08-11 07:12:39

标签: git

当我在远程分支发现错误的错误时,我总是删除它,在本地压缩并再次推送。因为我听说'git push -f'很危险。但是我注意到git fetch之后的推送结果显示如下。

新BRANCH_NAME“(强制)”

我的工作流程再次删除和推送是否正确?这种方式与'push -f'有什么不同?

2 个答案:

答案 0 :(得分:11)

从功能上讲,删除和再次推送至少与git push -f一样危险

然而,由于一个非常具体的原因,删除和再次推送实际上比git -f push更糟糕:

至少git -f push替换是原子的

虽然,当你独自工作时,这不是什么大问题。

  1. 当您使用git -f push时,您会被告知确切的更换内容 放置在生成的消息中:X...Y branch -> branch (forced update)。从那里,你可以确保X真正意味着要吹走。
  2. 执行git push origin :branch && git push origin branch时,如果您不是唯一可能推送到branch的人,则无法确切地告诉您删除了什么。

答案 1 :(得分:4)

不,首先删除远程分支不会使它更安全或任何东西。

强制推送是危险的原因是由于工作流原因,而不是技术原因。如果有人拉出你的错误分支,那么你就强行推动分支上的正确变更集,这可能会对他们的历史以及他们在分支上做出的任何改变造成严重破坏,因为他们的拉动将不再是快进(除非他们修复)他们错误的分支与强迫拉力或如果他们改变他们的变化),这可能意味着他们可能再次重新引入错误的变化。在一个只有一个提交者的团队中,这通常不会是一个大问题,更大的项目,有很多提交者和许多观察者,然后问题的可能性要大得多,因为它可能不只是一两个人已经下载了错误的分支。