自动变基 Git 个子分支

Automatically rebase Git sub-branches

假设我有这样的 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' 和 [=23= 之上重播提交 EF ],这将失败,因为他们编辑相同文件的相同行。所以我必须 运行 像这样笨拙的东西:

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

... 这需要做一个 git log 并复制粘贴一些东西(使用 鼠标 就像某种 loser!)。我知道这并不令人心碎,但这种使用模式对于 Git 来说一定很常见。谁能想出一种方法来一次性变基 topic1topic2

正如 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 在 topic2 变基到 topic1 期间重播 EF 的唯一原因是 E'F' 已经从他们原来的修改。在那种情况下,当 rebase 由于合并冲突而停止时,只需使用 git rebase --skip.