繁体   English   中英

自动rebase 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'F'之上重播提交EF ,这将失败,因为它们编辑了相同文件的相同行。 所以我必须像这样运行一些笨拙的东西:

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

...这需要做一个git log并复制粘贴一些东西(像某种失败者一样使用鼠标。),我知道这并不令人心碎。 但这种使用模式对于 Git 来说一定是相当普遍的。 任何人都可以想出一种方法来一次性变基topic1topic2吗?

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将重播EF的底垫中topic2topic1是,如果E'F'已经从他们的原稿进行修改。 在这种情况下,当由于合并冲突而使rebase停止时,只需使用git rebase --skip

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM