说我有这样的git历史记录:
A--B--C--D <master>
\--E--F <topic1>
\--G <topic2>
也就是说,我有两个主题分支,其中一个功能取决于另一个功能。与此同时,已经在master
上完成了工作,所以我想重新定义topic1
。这导致:
A--B--C--D <master>
| \--E'--F' <topic1>
\--E--F--G <topic2>
也就是说,topic1
被重新定位,但topic2
没有。我想谈谈这个:
A--B--C--D <master>
\--E'--F' <topic1>
\--G <topic2>
但如果我只是git rebase topic1 topic2
,Git会尝试在E
和F
之上重播提交E'
和F'
,这会失败,因为他们编辑相同文件的相同行。所以我必须像这样笨拙地运行一些东西:
git rebase --onto topic1 <sha1-of-commit-F> topic2
...这需要执行git log
并复制粘贴内容(使用鼠标,就像某种 loser !)。我知道这并不是令人心碎,但这种使用模式对于Git来说必定相当普遍。任何人都可以想到一种方法来一举变换topic1
和topic2
吗?
答案 0 :(得分:0)
正如Nils_M
在评论中指出的那样,rebase手册页显示Note that any commits in HEAD which introduce the same textual changes as a commit in HEAD..<upstream> are omitted (i.e., a patch already accepted upstream with a different commit message or timestamp will be skipped).
Git在E
到F
的重组期间重播topic2
和topic1
的唯一原因是E'
或F'
是从他们的原件修改。在这种情况下,当rebase因合并冲突而停止时,只需使用git rebase --skip
。