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

时间:2012-05-09 21:28:47

标签: git git-branch branching-and-merging git-merge git-rebase

我遇到了麻烦。有分支masterfeature。一百年前masterfeature有共同的祖先,但自那时以来已经过了100500次提交。 masterfeature分支现在非常不同。好。我花了一整天时间,最后我完成了这个%#$%#merge。但是......最终我要把这个结果推到一个存储库,并注意到我的队友在'master'分支中做了大约5次新提交... $#%#$这对我们很重要要提交 rebase 以快进我的合并。所以我需要在我的合并结果中加入这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个提交。这不是我想要的。我只需要E提交在C1,... C5之上,但不是master分支的所有提交。我看到这种行为,当我在gitk --all之间查看git rebase --continue时,会发生冲突,git mergetool个周期。

1 个答案:

答案 0 :(得分:0)

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

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

现在你得到的树正是你想要的。在这里删除一个标签,然后扔掉所有东西并重新开始。

重新执行合并,这次包括您正在合并的分支中的5个新提交。但是将-s ours作为策略选项并--no-commit传递以避免实际执行提交。< / p>

现在从您之前的merge + rebase中读取树。这应该与git checkout $tag -- .一样简单(其中$tag是您在之前结果中添加的标记)。

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

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