我遇到了麻烦。有分支master
和feature
。一百年前master
和feature
有共同的祖先,但自那时以来已经过了100500次提交。 master
和feature
分支现在非常不同。好。我花了一整天时间,最后我完成了这个%#$%#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
个周期。
答案 0 :(得分:0)
通过合并获取您的历史记录,并在此基础上重新设置5个新提交。是的,这不是你要求的,但请耐心等待。
解决出现的任何合并冲突。这应该很简单,因为你只处理5个新的提交。
现在你得到的树正是你想要的。在这里删除一个标签,然后扔掉所有东西并重新开始。
重新执行合并,这次包括您正在合并的分支中的5个新提交。但是将-s ours
作为策略选项并--no-commit
传递以避免实际执行提交。< / p>
现在从您之前的merge + rebase中读取树。这应该与git checkout $tag -- .
一样简单(其中$tag
是您在之前结果中添加的标记)。
现在运行git commit
。这将提交您的合并,包含您想要的历史记录,以及您之前工作生成的树。
如果这看起来不错,请继续推送并删除您的代码。