Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 执行两个非常不同的分支的合并由于需要快进合并提交而变得复杂_Git_Git Branch_Branching And Merging_Git Merge_Git Rebase - Fatal编程技术网

Git 执行两个非常不同的分支的合并由于需要快进合并提交而变得复杂

Git 执行两个非常不同的分支的合并由于需要快进合并提交而变得复杂,git,git-branch,branching-and-merging,git-merge,git-rebase,Git,Git Branch,Branching And Merging,Git Merge,Git Rebase,我有麻烦了。具有分支主分支和功能。一百年前,master和feature有着共同的祖先,但从那时起已经传递了100500次提交主和功能分支现在非常不同。好啊我花了一整天的时间,终于完成了这个%#$%#合并。但是当天结束时,我打算将结果推送到存储库中,并注意到我的队友在“master”分支中进行了大约5次新的提交…$#%#$对我们来说,重要的是重新设置基础,以加快我的合并进程。所以我需要将这5个提交合并到我的合并结果中。我已经在本地回购上提交了Ecommit(查看方案),这是将master合并到功

我有麻烦了。具有分支
主分支
功能
。一百年前,
master
feature
有着共同的祖先,但从那时起已经传递了100500次提交<代码>主和
功能
分支现在非常不同。好啊我花了一整天的时间,终于完成了这个%#$%#合并。但是当天结束时,我打算将结果推送到存储库中,并注意到我的队友在“master”分支中进行了大约5次新的提交…$#%#$对我们来说,重要的是重新设置基础,以加快我的合并进程。所以我需要将这5个提交合并到我的合并结果中。我已经在本地回购上提交了
E
commit(查看方案),这是将
master
合并到
功能中的结果。我不能把它推到服务器上,因为C1。。。C5-在
功能
上远程提交新内容。当我在remote上有新的东西时,当我已经做了更改时,我会
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
commit位于C1,…C5之上,但不需要
master
分支的所有提交。当我查看
gitk--
git-rebase之间的所有
,继续
,获取冲突,
git-mergetool
循环时,我看到了这种行为。

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

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

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

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

现在从上一次合并+重设基础中读取树。这应该像
git checkout$tag--.
(其中
$tag
是您在上一个结果上放置的标记)一样简单

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


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

对不起,我很笨,请详细解释您的想法。什么是“利用合并的历史记录,并在此基础上重新确定5个新提交的基础”。这是否意味着在我已中止的重设期间处理合并?(简直是地狱!)@Dao:以你现在的历史,你拥有大师,融合了当地特色。你想在上面重新设置远程功能的基础。实际上,最简单的方法可能只是对所有5次提交进行切利选择(
git cherry pick..remote/feature
)。@Dao:或者,您可以检查您的本地功能分支,更新它以匹配remote,然后只需
git rebase master
.hm。。我正在将
master
->合并到->
feature
,但没有将
feature
合并到
master
。远程上的C1、…、C5提交不在
master
上,而是在远程
feature
分支上。我在
主机上不需要它们。您确定要使用git rebase master
?我需要从
master
分支获得什么?所有内容都已在
E
commit中。如果您的
master
功能不匹配,请更正您的评论。如果我不明白,请解释。据我所知,
git-rebase-master
试图从remote\master中提取,并将来自remote的本地新提交向前推。@Dao:哦,对不起,我认为合并是在另一个方向。只需更换正在工作的分支即可。实际上,
git-rebase-master
实际上并没有做您认为它能做的事情。它没有任何网络活动。该命令将在
master
上重新设置当前分支的基础。对您来说最简单的事情可能就是
git checkout feature&&git cherry pick..remote/feature
获取这5个提交。如果您想使用
git-rebase
可以执行
git-checkout-feature&&git-reset--hard-remote/feature&&git-rebase@{1}
。樱桃采摘可能更容易