当你重写公共分支的历史时会发生什么?

时间:2012-06-22 02:34:44

标签: git

我到处读到,重写已发布的提交历史记录很糟糕,并且会“破坏”其他开发人员的存储库。

然而,我无法找到关于究竟会破坏的细节以及如何修复它。

所以,如果我要重写历史记录和git push --force,我应该告诉其他开发人员为了让他们获得最新信息而做什么?

1 个答案:

答案 0 :(得分:4)

这可能是我见过的最好的解释:http://git-scm.com/book/ch3-6.html#The-Perils-of-Rebasing

简短的回答是,其他开发人员会删除修改后的公共存储库,并尝试将这些更改与其当前工作合并。由于最近的祖先可能已更改此合并可能很复杂,可能需要手动执行。一个粗略的例子如下:

Developer A进行了多次提交并将它们推送到服务器。然后,开发人员B将这些提交合并到其本地分支(或者可能是其中一个提交的分支)。开发人员A决定重新设置他们的旧提交并将结果推送到服务器。

这有效地从开发人员B使用的服务器中删除了提交,并用大致相同的具有不同标识符的提交替换它们。

现在,如果开发人员B再次从服务器上撤下,他们需要将post-rebase提交合并到他们的工作中,有效地将两次相同的更改合并。

如果开发人员A在rebase流程中删除了提交或修改提交,那么开发人员B有一个更复杂的合并来处理。