此问题已在此处有答案:
Rebasing a Git merge commit(5个答案)
关闭7天前。
我想把分行从
A -- B
\
C -- D -- E -- G
\ /
------F-
到
A -- B
\ \
C D -- E -- G
\ /
------F-
git rebase --onto B C G
将打破D、E、F、G的结构
A -- B -- D -- E -- F
\
C
只想保持D,E,F,G的结构
我该怎么做?
2条答案
按热度按时间rnmwe5a21#
你们差点就成功了。您只需添加
--rebase-merges
选项。例如,如果你改变了你尝试的rebase:
收件人:
你会得到你想要的图表。
请注意,这并不总是有效的(请参阅下面引用的文档中我强调的短语):
在默认情况下,一个变基会简单地从todo列表中删除合并提交,并将变基的提交放到一个线性的分支中。使用
--rebase-merges
,rebase将尝试通过重新创建合并提交来保留要被rebase的提交中的分支结构。这些合并提交中的任何已解决的合并冲突或手动修改都必须手动解决/重新应用。你给出的例子产生了一个线性图,大概没有合并冲突。如果在不使用
--rebase-merges
的情况下重定基准时没有冲突,那么在添加该选项时也不应该有冲突。**提示:**任何时候你变基,也许特别是当你使用
--rebase-merges
选项时,你可以添加交互式选项(-i
)来查看变基之前要做什么。这通常对于修改变基会做什么很有用,但也只是为了看看当你包含合并提交时发生了什么,这样你就可以理解它在幕后是如何工作的。它还解释了为什么在包含--rebase-merges
时会看到类似“rebase 1 of 11”的内容,而在进行常规的rebase时会看到“rebase 1 of 3”。vcudknz32#
如果您不存在变基问题,可以尝试:
更新:
E是将comit从t3合并到t2,在参考@TTT的答案后,我添加了选项
--rebase-merges
以防止git rebase --onto
崩溃merge commit。