【发布时间】:2020-05-20 06:10:55
【问题描述】:
假设我从这样的历史开始:
A---B---C
\
\-D---E
然后,我合并了两个分支,解决了过程中的一些冲突:
A---B---C---F
\ /
\-D---E-/
但之后,我想重写历史,使其看起来像这样:
A---B---C---EF
\ /
\-D-----/
换句话说,我想将更改从分支提交E 移动到合并提交F。好像我在手动解决将 D 合并到 C 的冲突时对 E 进行了更改。
(我的实际原因是E 只是一个合并准备提交,以使预期的冲突更容易解决。它本身没有多大价值,我不希望它污染历史. 我不想将 E 压缩成 它的 前身,因为它的变化在逻辑上是分开的。)
我试过了:
git rebase -i --rebase-merges HEAD~10
但这给了我:
...
pick 1069500 ...
merge -C 44c0a69 ...
# s, squash <commit> = use commit, but meld into previous commit
# ...
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
所以看起来提交可以是合并提交,或 git rebase -i 可以将其压缩到其前身中,但不能两者兼而有之。无论如何,git rebase 会是 make me reapply my manual conflict resolutions,这有点臭。
还有其他方法吗?
【问题讨论】:
标签: git git-merge git-rewrite-history