执行两个非常不同的分支的合并,需要快进合并-提交



我有麻烦。有分支masterfeature。一百年前,masterfeature有共同的祖先,但从那时起就过去了 100500 次提交。 masterfeature分支现在非常不同。还行。我花了一整天的时间,终于完成了这个%#$%#合并。但。。。在一天结束时,我打算将此结果推送到存储库,并注意到我的队友在"master"分支中进行了大约 5 次新提交...... $#%#$ 对我们来说,变以在此提交之前快进我的合并很重要。所以我需要在合并结果中合并这 5 个提交。我已经在我的本地存储库上E提交(查看方案(,这是将master合并到feature的结果。由于C1,我无法将其推送到服务器上,...C5 - feature 上远程的新提交。当我在远程上有新东西时,当我已经进行了更改时,我的标准做法是git pull --rebase保持一个分支的历史记录线性。我运行了git pull --rebase,实际上得到了 git 的建议,再次进行合并。在 C1 中甚至未触及的文件中再次出现很多冲突,...C5 提交。我做错了什么?请帮忙。如何获得结果,我已经淹没在第二个方案中了?我疯了吗?有可能做到吗?

Now:
o--A--o-----...100500 commits....[master]....--o-----------B
                                                            
        o---...100500 commits....[feature - local repo]...C--E(local repo - epic merge result)
        |                                    
        o---...100500 commits....[feature - remote repo]..C--C1--C2--C3--C4--C5(remote repo, feature branch - additional 5 commits)

Need to fast-forward E ahead C1, C2,... C5, that were added on remote when I was busy with merge:
o--A--o-----...100500 commits....[master]....--o-----------------------B
                                                                        
        o---...100500 commits....[feature]...--o--C--C1--C2--C3--C4--C5--E(epic merge result)

更新
当我做git pull --rebase(停留在feature分支上(时,我注意到 git 首先尝试在 C1,..,C5(feature分支的远程提交(之上,然后是第二个,然后是master分支的其他 100500 次提交。这不是我想要的。我只需要在 C1 之上提交E,..C5,但不是master分支的所有提交。当我研究git rebase --continue之间的gitk --all时,我看到了这种行为,得到冲突git mergetool周期。

获取您的历史记录,合并,并在此基础上重新设置5个新提交的基础。是的,这不是你要求的,但要耐心等待。

解决出现的任何合并冲突。这应该很简单,因为你只处理 5 个新提交。

现在,您有一个结果树,正是您想要的。在这里放一个标签,然后扔掉所有东西,重新开始。

重新执行合并,这次包括要合并的分支中的 5 个新提交。但是-s ours传递为策略选项,--no-commit以避免实际执行提交。

现在读取您之前的合并+变基树。这应该像git checkout $tag -- .一样简单(其中$tag是您放置在之前结果上的标签(。

现在运行git commit .这将提交您的合并,与您想要的历史记录以及您之前的工作生成的树。

如果这看起来不错,请继续推送它并删除您的标签。

最新更新