GIT:如何在不覆盖历史的情况下恢复分支合并?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我有两个分支:masteropengl。我最近完成了(至少我认为是这样)的实现。opengl并决定将其合并为master:

git checkout master
git merge opengl
git push

在我这样做之后,有几个开发人员正在开发master分支提取了我的更改,结果发现我的实现与它们的一些代码冲突。因此,我想在master分支,但没有覆盖历史。

注意,我希望能够将opengl枝入master最终(在我修复了所有的bug之后)。因此,只需签出旧版本的master新创建的提交将取消我的更改。opengl当我尝试合并它的时候。

谢谢。

提问于
用户回答回答于

git revert这是正确的解决方案,但当想要再次合并该分支时,它将在将来产生一个后果。

下一次合并必须先“还原还原”,然后合并分支。

用户回答回答于

首先,如果想在本地保持合并提交,则创建一个新分支,以便在移动后提交不会“消失”master:

git branch erroneousMerge master

如果其他开发人员在错误合并后也提交了,他们也必须这样做!

然后,重置master引用合并之前的最后一次提交;假设它是提交e498b2:

git checkout e498b2
git branch -f master

现在,你可以把修正后的master(-f指示要使服务器重置其master分支到您所指向的提交,即使此提交是它在存储库中所指向的提交的祖先):

git push -f origin master

现在,其他开发人员可以更新他们的master若要与服务器匹配,请执行以下操作(-f指示它们接受分支已向后移动):

git fetch -f origin master:master

如果其他开发人员在错误的合并之后进行了更改(假设合并提交是abc123,他们可以用rebase若要将更改移动到已更正的master:

git rebase --onto master abc123 oldMaster

如果在某个点搞砸了,并且由于不再有任何分支指向它们而导致“失败”提交,则可以使用git fsck --lost-found去找回他们。

扫码关注云+社区