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我通常选择后者。