在下图中,您将首先看到真实情况,然后看到我想要的解决方案
所以我想撤消从 B 到 A 的 merge 。
问题是一切都已经推送了,开发继续在分支 C 上进行,而且我在将 A 与 B merge 后对 A 进行了新的提交。
是否可以将此 git 情况更改为第二个镜像,或者“反向提交”是纠正错误的唯一方法?
我做了什么?
- 撤销用于 merge 的提交
- 在 A 的新提交上重新设置分支 C
- 强制推送在 C 上进行的 rebase 以更改远程分支
但是我得到的结果方案看起来并不清晰,这就是我寻求另一个答案的原因
最佳答案
分支 C 看起来像这样:
...--a---------M--f--g--h--i--j
\ / ^ ^
b--c--d [A] [C]
^
[B]
首先,您应该重新设置分支 C
的基址:
git rebase --onto <sha-of-commit-a> B C
执行此操作后,分支 C 应该如下所示:
a--f'--g'--h'--i'--j'
^
[C]
现在是更新分支A
的时候了:
git checkout A
git reset --hard <sha-of-commit-g'>
仅此而已。您的存储库应该看起来像从未发生过 merge 。
关于git - 如何删除 merge 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439920/