Git 将修复提交从一个分支移动到另一个分支,然后再合并它们
正在处理一个不完整的Git 将修复提交从一个分支移动到另一个分支,然后再合并它们,git,branching-and-merging,git-history-graph,Git,Branching And Merging,Git History Graph,正在处理一个不完整的功能分支,我已经为主机提交了一个修复 (master) A-B-C (feature) \_D-E-Fix-G-H 如何将修复程序提交到主程序 (master) A-B-C------Fix' (feature) \_D-E-Fix-G-H 。。。但是仍然能够合并/重新设置我的功能在主机上的分支 (master) A-B-C-D-E-Fix-G-H 我认为Fix'应该维护与Fix相同的SHA,这样就不会被视为完全不同的提交,
功能
分支,我已经为主机提交了一个修复
(master) A-B-C
(feature) \_D-E-Fix-G-H
如何将修复程序
提交到主程序
(master) A-B-C------Fix'
(feature) \_D-E-Fix-G-H
。。。但是仍然能够合并/重新设置我的功能
在主机上的分支
(master) A-B-C-D-E-Fix-G-H
我认为Fix'
应该维护与Fix
相同的SHA,这样就不会被视为完全不同的提交,并且可以平滑地合并/重新设置基础(因此我通常使用的cherry pick
,在这里没有帮助)。
因此,也许这是不可能的,但我很好奇是否有任何方法可以从一个分支与另一个分支共享一些临时修复,并且以后仍然能够合并其余丢失的提交
我的功能
分支只是一个本地分支。当然,我希望避免重写历史。如果修复
提交是可选择的,那么它独立于D
和E
,因此您可以git rebase-ic
并重新排序历史,将修复
放在D
后面
然后很容易将特性分支合并回master
(master) A-B-C--Fix'
(feature) \_Fix-D-E-G-H
您提到您希望避免重写历史记录,但如果您同意选择单个修复提交,我认为重新排序您的功能分支以使其更易于合并应该是可以接受的。通常我已经cherry pick
来快速解决此问题。然后,当合并/重定基址时,它将看到已修复的代码,因此它将什么也不做。而且相当不错。我更好奇的是保持相同的提交,就像在分支中常见的一样,而不必在Fix'
(在master
中将D
和E
放在C
和Fix
之间,之后,在master
中把Fix
放在C
之后,是否有可能将D
和E
放在C
之后?为了不重写历史,唯一的要求不是Fix
,D
和E
保持相同的祖先?)据我所知,如果您将D
和E
保持在C
和Fix
之间,但在master
中也有Fix'
,那么合并应该创建一个合并提交I
,有两个父对象和Fix
的两个明显副本。我不喜欢合并提交,而不喜欢编辑历史,so我通常选择后者。