撤销git合并,保留后来的提交记录

3
我遇到了一个关于我的代码库的问题:
我的分支树结构如下:
(branch)         a - b - c - d - e - f - g
               /           /
(master)  1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 ...

在这里,我从主分支的提交1处创建分支时分离了出来,然后在提交5时将主分支合并到了分支中。
问题是:在合并时,我放弃了一些更改,我想撤销它们,以便我可以再次将主分支合并到我的分支中,就好像在提交5时没有发生合并一样。
换句话说,如何撤消提交5(或提交d)上合并的影响,而不会丢失后续提交中的更改(即e-f-g)?
我的目标是能够将主分支合并回分支,但现在我会更加谨慎地进行合并。
谢谢。

你的分支已经与其他人分享了吗(推送)?还是可以对其进行变基操作? - Richard Hansen
已经上传到服务器,但没有人动过它。是的,只要我能保留更改,重新设置基础分支就可以了。所以,比如说,如果你想将其基于 c 重新设置,只要我能保留 e - f - g,但失去 d,那就没问题。 - Levko Ivanchuk
这个问题看起来是这个问题的重复。是吗? - Richard Hansen
我已经尝试了答案中的方法。然而,这两个分支长期以来一直不同步,我在shell中根本看不到提交d。不过,最后一个答案似乎很有希望,我明天会尝试一下。 - Levko Ivanchuk
1个回答

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

我采用了您创建新分支的想法,但之后我采取了不同的方法。我基本上是从该分支中挑选了提交 e-f-g... 到新分支中。感谢您指引我走上正确的轨道! - Levko Ivanchuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接