在master之前恢复与旧分支的合并恢复

时间:2015-08-17 09:38:38

标签: git merge git-revert

这是我的情况。 在最初由master(M)创建的Branch X上,我做了一些提交。然后我打开了拉取请求,一位同事合并为主人。

然后,这位同事注意到了一些问题并创建了一个分支RB,他将合并恢复为主控。

与此同时,我在分支X中进行了另一次提交,该提交已被推送到原点。现在,如果我打开从X到master的pull请求,我会看到与我的新提交相关的合并冲突,但是在第一次合并之前所做的所有更改都会被合并恢复完全覆盖。

X--X--X--X
       \
M-------M-----M
         \    /
         RB--RB

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用交互式rebase有选择地删除master中的合并提交,从而还原所有更改。

git checkout master
git rebase -i HEAD~4

这将提示您一个类似的提交列表:

pick jd832ng some commit
pick bd381nv merge commit branch RB into master
pick al83mld an earlier commit here
pick f2ui2nd another earlier commit

删除包含合并提交的行,并为您提供以下内容:

pick jd832ng some commit
pick al83mld an earlier commit here
pick f2ui2nd another earlier commit

现在保存此文件,并完成rebase。您已从master分支中删除了合并提交。

注意:

如果分支RB的合并提交是master最近的提交,那么您可以使用以下方法对其进行核对:

git checkout master
git reset --hard HEAD~1

这将删除master分支的头部。如果这恰好是合并提交,那么你很幸运,你可以避免交互式rebase。另一方面,如果其他人在合并之上做出了提交,那么你几乎可以选择交互式rebase。