git - 如何删除 merge 提交

标签 git workflow

在下图中,您将首先看到真实情况,然后看到我想要的解决方案

enter image description here

所以我想撤消从 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/

相关文章:

git - 错误 : Error cloning remote repo 'origin'

python - 使用预提交 Hook 防止提交 pdb 或 pytest set_trace

docker - 我可以通过暴露的端口停止 docker 容器吗?

workflow - 48 分钟进入和维持程序员流程的技巧

workflow - 为什么要使用工作流程系统以及我有哪些选择?

windows - Git for Windows (Git Bash) 中的包管理?

git - 通过 "sneakernet"复制 git 存储库

build-process - 应用程式建立/部署工作流程

npm - 使用 npm 包

windows - 如何在运行 Parallels 的 Windows 8 Mac 上设置 Git