假设我有这样的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
正如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将重播E
和F
的重订期间topic2
到topic1
是,如果E'
还是F'
从他们的原件已被修改。在这种情况下,当由于合并冲突而使重新设置停止时,只需使用git rebase --skip
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句