将更改从远程拉到本地合并下方

Pull a change from remote to below a local merge

我确定这一定是骗局,但我找不到合适的词进行搜索...

git 遥控器上我们有:

branch ABC A--B--C
branch XYZ X--Y--Z

我在本地合并(是的,我应该开始一个新的分支,但我没有):

branch ABC A--B--C-+-ABC_XYZ
branch XYZ X--Y--Z-/

我在本地测试然后去推送,但是当我一直在测试的时候有人更新了远程 ABC:

branch ABC A--B--C--D
branch XYZ X--Y--Z

我如何到达:

branch ABC A--B--C--D-+-ABC_XYZ
branch XYZ X--Y--Z----/

疼痛最小?

我试过 git pull --rebase,但它会尝试重做整个合并,这非常耗时,并且可能会重新引入我之前已修复的合并错误。必须有一个简单的方法来实现这个!


更新:根据提示 in this answer,我得到了这个部分解决方案:

git rebase -p ABC --onto D
git merge ABC_XYZ

现在已经足够好了但还不够完美:

branch ABC A--B--C--D----------+-ABCD_XYZ
                 |             |
                 +--+-ABC_XYZ--+
                    |
branch XYZ X--Y--Z--+

我还是很想知道如何做到完美!

顺便说一句,我有 git 2.7.4,但是 2.18 似乎改进了这个过程。

您可以使用 git rebase--preserve-merges(简称 -p)选项:

git rebase -p ABC ABC_XYZ

或者创建一个新分支并重新创建合并。然后根据您的判断清理旧的 ABC_XYZ 分支。

git checkout -b ABC_XYZ_new Z
git merge D