如何使用 git rebase 保留调整后的合并提交(冲突和非冲突的自动合并结果)?

How to preserve adjusted merge commits (conflicting and non-conflicting automerge results) with git rebase?

我正在使用 git rebase -i --rebase-merges <commit> 更改一些提交消息,效果很好。但是我想保留的合并提交有更改或冲突解决方案;有重做它们的简单方法吗?

我目前的解决方法如下:

  1. 在交互式 rebase 概述中,将 merge -C <commit> 更改为 merge -c <commit> 以确保不会自动提交合并提交
  2. 合并提交完成后,检查原始合并的状态:git checkout <commit> -- .(需要 -- . 以防止 HEAD 重置为)
  3. 查看暂存区
  4. 继续变基

这里没有 Royal Road:当你做了一个 evil merge 并要求 Git 重新执行合并(与 git rebase -r 或类似)时,Git 根本不会进行邪恶的合并。

出于这个原因,有时进行非恶意合并并在其后进行修复提交会更好,即使非恶意合并在某种意义上是“坏的”(例如,不编译或包含一个已知的错误)。如果您不喜欢这种方法,有时您可以在 进行合并之前 进行提交,这样最终的非邪恶合并是好的。但这可能会将“坏处”推入 that 提交(预合并修复),让您拥有同样糟糕的设置。

你可以选择糟糕的解决方案:进行邪恶的合并并避免变基;做一个邪恶的合并,并在 rebase 时付出额外的努力;或者通过使用修正提交来避免邪恶的合并。