如何使用 git rebase 保留调整后的合并提交(冲突和非冲突的自动合并结果)?
How to preserve adjusted merge commits (conflicting and non-conflicting automerge results) with git rebase?
我正在使用 git rebase -i --rebase-merges <commit>
更改一些提交消息,效果很好。但是我想保留的合并提交有更改或冲突解决方案;有重做它们的简单方法吗?
我目前的解决方法如下:
- 在交互式 rebase 概述中,将
merge -C <commit>
更改为 merge -c <commit>
以确保不会自动提交合并提交
- 合并提交完成后,检查原始合并的状态:
git checkout <commit> -- .
(需要 -- .
以防止 HEAD 重置为)
- 查看暂存区
- 继续变基
这里没有 Royal Road:当你做了一个 evil merge 并要求 Git 重新执行合并(与 git rebase -r
或类似)时,Git 根本不会进行邪恶的合并。
出于这个原因,有时进行非恶意合并并在其后进行修复提交会更好,即使非恶意合并在某种意义上是“坏的”(例如,不编译或包含一个已知的错误)。如果您不喜欢这种方法,有时您可以在 进行合并之前 进行提交,这样最终的非邪恶合并是好的。但这可能会将“坏处”推入 that 提交(预合并修复),让您拥有同样糟糕的设置。
你可以选择糟糕的解决方案:进行邪恶的合并并避免变基;做一个邪恶的合并,并在 rebase 时付出额外的努力;或者通过使用修正提交来避免邪恶的合并。
我正在使用 git rebase -i --rebase-merges <commit>
更改一些提交消息,效果很好。但是我想保留的合并提交有更改或冲突解决方案;有重做它们的简单方法吗?
我目前的解决方法如下:
- 在交互式 rebase 概述中,将
merge -C <commit>
更改为merge -c <commit>
以确保不会自动提交合并提交 - 合并提交完成后,检查原始合并的状态:
git checkout <commit> -- .
(需要-- .
以防止 HEAD 重置为) - 查看暂存区
- 继续变基
这里没有 Royal Road:当你做了一个 evil merge 并要求 Git 重新执行合并(与 git rebase -r
或类似)时,Git 根本不会进行邪恶的合并。
出于这个原因,有时进行非恶意合并并在其后进行修复提交会更好,即使非恶意合并在某种意义上是“坏的”(例如,不编译或包含一个已知的错误)。如果您不喜欢这种方法,有时您可以在 进行合并之前 进行提交,这样最终的非邪恶合并是好的。但这可能会将“坏处”推入 that 提交(预合并修复),让您拥有同样糟糕的设置。
你可以选择糟糕的解决方案:进行邪恶的合并并避免变基;做一个邪恶的合并,并在 rebase 时付出额外的努力;或者通过使用修正提交来避免邪恶的合并。