如何删除合并提交
How can I delete merge commit
在下图中,您将首先看到真实情况,然后是我想要的解决方案
所以我想撤消从 B 到 A 的合并。
问题是所有的东西都已经推送了,开发在分支C上继续进行,而且我在与B合并后在A上做了一个新的提交。
是否可以将这种 git 情况更改为第二张图片,或者“反向提交”是纠正错误的唯一方法吗?
我做了什么?
- 撤销用于合并的提交
- 在 A 的新提交上对分支 C 进行变基处理
- 强制推送在 C 上所做的 rebase 以更改远程分支
但是我得到的结果方案看起来不太清楚,这就是我寻求另一个答案的原因
分支 C 看起来像这样:
...--a---------M--f--g--h--i--j
\ / ^ ^
b--c--d [A] [C]
^
[B]
首先,你应该 rebase 分支 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'>
就是这样。您的存储库应该看起来像从未发生过这种合并。
在下图中,您将首先看到真实情况,然后是我想要的解决方案
所以我想撤消从 B 到 A 的合并。
问题是所有的东西都已经推送了,开发在分支C上继续进行,而且我在与B合并后在A上做了一个新的提交。
是否可以将这种 git 情况更改为第二张图片,或者“反向提交”是纠正错误的唯一方法吗?
我做了什么?
- 撤销用于合并的提交
- 在 A 的新提交上对分支 C 进行变基处理
- 强制推送在 C 上所做的 rebase 以更改远程分支
但是我得到的结果方案看起来不太清楚,这就是我寻求另一个答案的原因
分支 C 看起来像这样:
...--a---------M--f--g--h--i--j
\ / ^ ^
b--c--d [A] [C]
^
[B]
首先,你应该 rebase 分支 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'>
就是这样。您的存储库应该看起来像从未发生过这种合并。