[英]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'
和F'
之上重播提交E
和F
,这将失败,因为它们编辑了相同文件的相同行。 所以我必须像这样运行一些笨拙的东西:
git rebase --onto topic1 <sha1-of-commit-F> topic2
...这需要做一个git log
并复制粘贴一些东西(像某种失败者一样使用鼠标。),我知道这并不令人心碎。 但这种使用模式对于 Git 来说一定是相当普遍的。 任何人都可以想出一种方法来一次性变基topic1
和topic2
吗?
Git 2.38 现在有rebase
的--update-refs
参数。
正如Nils_M
在评论中指出的那样,rebase手册页说: Note that any commits in HEAD which introduce the same textual changes as a commit in HEAD..<upstream> are omitted (ie, 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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.