自动重新绑定Git子分支

时间:2015-09-18 12:40:54

标签: git version-control branch rebase

说我有这样的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会尝试在EF之上重播提交E'F',这会失败,因为他们编辑相同文件的相同行。所以我必须像这样笨拙地运行一些东西:

git rebase --onto topic1 <sha1-of-commit-F> topic2

...这需要执行git log并复制粘贴内容(使用鼠标,就像某种 loser !)。我知道这并不是令人心碎,但这种使用模式对于Git来说必定相当普遍。任何人都可以想到一种方法来一举变换topic1topic2吗?

1 个答案:

答案 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在EF的重组期间重播topic2topic1的唯一原因是E'F'是从他们的原件修改。在这种情况下,当rebase因合并冲突而停止时,只需使用git rebase --skip