3

我有麻烦。有树枝masterfeature. 一百年前masterfeature有共同的祖先,但从那时起已经过去了 100500 次提交。masterfeature分支现在非常不同。好的。我花了一整天的时间,终于完成了这个 %#$%# 合并。但是...在一天结束时,我打算将此结果推送到存储库,并注意到我的队友在“主”分支中进行了大约 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分支的远程)之上,然后是第二个,然后是其他 100500 个master分支提交。这不是我想要的。我只E需要在 C1、..C5 之上提交,但不是所有master分支的提交。我看到这种行为,当我查看gitk --allbetween git rebase --continue, get 冲突,git mergetool循环时。

4

1 回答 1

0

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

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

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

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

现在从您之前的合并+变基中读取树。这应该很简单git checkout $tag -- .$tag您在之前的结果中放置的标签在哪里)。

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

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

于 2012-05-09T21:34:59.823 回答