git - 当您重写公共(public)分支的历史时会发生什么?

标签 git

我到处都读到,重写已发布的提交历史是不好的,并且会“破坏”其他开发人员的存储库。

但是,我一直无法找到有关究竟是什么会损坏以及如何修复它的详细信息。

那么,如果我要重写历史和 git push --force,我应该告诉其他开发人员做什么才能使他们保持最新状态?

最佳答案

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

简短的回答是,其他开发人员会 pull 下修改后的公共(public)存储库,并尝试将这些更改适本地 merge 到他们当前的工作中。由于最近的祖先可能已更改,因此此 merge 可能很复杂,可能需要手动执行。一个粗略的例子如下:

开发人员 A 进行了多次提交并将它们推送到服务器。开发人员 B 然后将这些提交 merge 到他们的本地分支(或可能来自其中一个提交的分支)。开发人员 A 决定 rebase 他们的旧提交并将结果推送到服务器。

这有效地删除了来自开发人员 B 正在使用的服务器的提交,并将它们替换为具有不同标识符的基本相同的提交。

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

如果开发人员 A 在 rebase 过程中删除了提交或修改了提交,那么开发人员 B 需要处理更复杂的 merge 。

关于git - 当您重写公共(public)分支的历史时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11149499/

相关文章:

git pull - 在再次推送之前 merge 远程更改

git - 微服务架构的 git 存储库结构的标准和更好的方法是什么?

git - 将 git 分支移动到另一个本地存储库

git 看不到文件...如何理解哪里出了问题?

git - 哪个 git 工具生成了这个 TreeView ?

git - 查看存储中的内容而不应用它

git一次添加多个文件

git - 压缩和重组提交

git - 从 git 1.9.5 升级到最新的 2.6 我需要注意什么?

git - git push tag错误: "Deleting a non-existent ref."的含义