撤消git合并,保留稍后提交的提交

时间:2013-06-14 03:20:39

标签: git merge branch undo

我用我的回购邮件偶然发现了这个问题:

我的分支树有以下结构:

(branch)         a - b - c - d - e - f - g
               /           /
(master)  1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 ...

在这里,当我创建分支时,我在提交1处从master分支,然后在提交5中将master合并到分支。

问题是:在合并时,我放弃了一些更改,我想将它们还原,以便我可以再次将master合并到我的分支中,就像在commit 5中的合并从未发生过一样。

换句话说,如何在不提交后续提交中的更改的情况下撤消合并对提交5(或提交d)的影响? (即e - f - g)

我的目标是能够将master合并回分支,但现在我会更加小心我的合并。

感谢。

1 个答案:

答案 0 :(得分:3)

(branch)         a - b - c - d - e - f - g
               /           /
(master)  1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 ...

git rebase --onto c d g
git checkout -b newbranch

(newbranch)                e' - f' - g'
                          /
(branch)         a - b - c - d - e - f - g
               /           /
(master)  1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 ...

如果您对结果感到满意,请丢弃旧分支并重命名新分支:

git branch -D branch
git branch -m newbranch branch

最后推新分支。

git push -n origin branch # check what you're about to push
git push -f origin branch # -f is required to rewrite history; be careful