不小心合并了错误的分支,如何修复Git主分支? [英] How to fix a Git master branch after accidently merging the wrong branch?
本文介绍了不小心合并了错误的分支,如何修复Git主分支?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个开发分支,在它准备好之前,我意外地合并到了主分支中。
因为我这样做是错误的,所以我决定恢复Master中的更改,这样我的更改就不在那里了。此进程创建了一个还原提交,从主服务器中删除了我的更改。
我觉得一切都很好...
现在已经过去了一周,我几乎准备好将我的分支合并回Master。由于还有其他开发人员在其他分支上工作,我决定通过将Master中的任何新更改合并回我的分支来更新我的Development分支。此进程似乎会删除我的所有工作。
回顾刚刚来自Master的历史,它包含意外提交和恢复提交。这意味着每当我从Master更新我的分支时,还原提交都会删除我的大部分工作。如何将主服务器中的更改合并回我的分支,但不包括还原提交?
我能想到的只有两种可能性:
- 仔细检查合并中的每个项目,并尝试手动删除还原的项目(我认为这是不可能正确完成的,要正确完成完全是一场噩梦)。
- 将我所做更改的所有文件复制到本地,从Master合并,然后尝试将所有更改复制/粘贴回我的分支(这可能也是正确的噩梦)。
我希望有更好的自动化方法来完成此操作(我希望进行某种类型的合并,但忽略某些提交过程)。
推荐答案
因此,您的情况是这样(时间从左向右流动):
--o--o--o---M--R--o <- master
/
A--B--C--D--E <- devel
您已将提交A、B和C合并到主服务器中,然后恢复了R中的更改,R是A+B+C的反转。
当您合并两个分支时(合并到哪个分支并不重要),您将从两边获得自上一个公共祖先以来的所有内容。
在这种情况下,共同的祖先是C,所以你得到了R、D和E。从Devel的角度来看,这看起来像是A、B和C被还原了,但从师父的角度看,似乎只发生了D和E。
解决方案1:还原
您可以恢复主分支或从主分支派生的辅助分支上的R。然后将它们合并:--o--o--o---M--R--o <- master
/
A--B--C R' <- aux (git revert R)
D--E---M' <- devel
现在您可以将Devel合并到Master。
解决方案2:调整分支机构的基础
使用git rebase --force-rebase
使用git rebase --force-rebase
:
--o--o--o---M--R--o <- master
| /
| A--B--C--D--E <- (abandoned)
A'-B'-C'-D'-E' <- devel
现在您可以将Devel合并到Master。
解决方案3:隐藏不需要的公共祖先(仅限专家)
您临时构建此历史记录:
--o--o--o---M--R--o <- master
A--B--C--D--E <- devel
安装移植物:
git replace --graft M M^
这告诉Git提交M
只有一个父级M^
。现在您可以将Devel合并到Master。
最后,恢复实际历史记录:
git replace --delete M
[编辑:使用git replace
而不是过时的移植文件。]
这篇关于不小心合并了错误的分支,如何修复Git主分支?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文