自动变基 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= 之上重播提交 E
和 F
],这将失败,因为他们编辑相同文件的相同行。所以我必须 运行 像这样笨拙的东西:
git rebase --onto topic1 <sha1-of-commit-F> topic2
... 这需要做一个 git log
并复制粘贴一些东西(使用 鼠标 就像某种 loser!)。我知道这并不令人心碎,但这种使用模式对于 Git 来说一定很常见。谁能想出一种方法来一次性变基 topic1
和 topic2
?
正如 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
期间重播 E
和 F
的唯一原因是 E'
或 F'
已经从他们原来的修改。在那种情况下,当 rebase 由于合并冲突而停止时,只需使用 git rebase --skip
.
假设我有这样的 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= 之上重播提交 E
和 F
],这将失败,因为他们编辑相同文件的相同行。所以我必须 运行 像这样笨拙的东西:
git rebase --onto topic1 <sha1-of-commit-F> topic2
... 这需要做一个 git log
并复制粘贴一些东西(使用 鼠标 就像某种 loser!)。我知道这并不令人心碎,但这种使用模式对于 Git 来说一定很常见。谁能想出一种方法来一次性变基 topic1
和 topic2
?
正如 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
期间重播 E
和 F
的唯一原因是 E'
或 F'
已经从他们原来的修改。在那种情况下,当 rebase 由于合并冲突而停止时,只需使用 git rebase --skip
.