如何修复这个git分支?

时间:2016-02-13 19:42:00

标签: git github

我在解决这些问题时遇到了一些麻烦:

enter image description here

目前我正在intercom-bridge分支master(最初是黄线),这是external-service-user的一个分支。为了实现新功能,我从intercom-bridge创建了一个分支intercom-bridge(黑线),然后当我将此分支合并到intercom-bridge时,我得到了这个结果。

我认为问题是我在与external-service-user合并之前对external-service-user进行了更改。

我想要的是组织提交,以便查看所有更改都是在一个分支中进行的。如果可能,将黑线(intercom-bridge)合并到黄线(NSItemProviderCompletionHandler)。有可能吗?

2 个答案:

答案 0 :(得分:1)

C 是一个与 external-service-user 完全相同的分支,然后您尝试在其中合并master。

如果您无法进入像C这样的分支状态: 你可以做些什么。首先确定触发合并的提交,这里它是从黄色线左边到右边的第3个黄点。让我们调用此提交哈希3,但您必须使用历史记录中的实际哈希值进行替换(感谢上尉明显哈哈)。

git checkout 3
git checkout -b C

C州创建分支时:

git fetch
git checkout C
git rebase -p origin/master

这应该足够了。如果出现冲突,请解决它们,然后将git add与相关文件一起使用,一旦将它们全部添加到索引中(使用git status检查 - >如果您忘记了其中一个,它们通常被描述为“已修改”) ,使用git rebase --continue

Rebase策略重放您尝试重新绑定的分支之前的每个提交,所以如果文件似乎有多次冲突,请不要惊慌,只需重复上述步骤,直到冲突全部解决

此外,-p选项(p表示保留)很重要,因此在此过程中,来自master的任何先前合并都不会被重新定义。

答案 1 :(得分:0)

如果您希望单个分支包含所有更改,您只需将内容(分支)拉到所需的分支

# checkout master branch
git checkout master

# merge all the desired branches into master
git merge external-user-service intercom-bridge

现在master包含所有3个分支中的所有更改。

使用cherry-pick

git cherry-pick允许您选择在任何分支中对任何其他分支进行的任何提交。在您的情况下,您可以简单地签出主分支,然后cherry-pick来自您希望的任何分支的所有提交(cherry-pick支持范围,以便您可以指定开始和结束提交而不是列出所有提交)

这样您就可以控制提交在合并分支中的显示方式。

例如:

git cherry-pick ebe6942..905e279