如何解决Git冲突?

14

我有一个pull request,GitHub告诉我“这个分支存在必须解决的冲突”。我尝试了:

~/src/networkx: git rebase origin/master
Current branch topo is up to date.
~/src/networkx: git merge origin/master
Already up-to-date.

如果一个文件中存在许多冲突,使用带有--ours或--theirs标志的git checkout可能值得一试——有时比手动解决冲突更容易。 - gpullen
3个回答

8

首先,您需要确保设置了上游远程仓库:

git remote add upstream git@github.com:networkx/networkx.git

您需要获取upstream/master,然后在其上进行变基(rebase)。具体操作如下:

git fetch upstream
git checkout <feature-branch>
git rebase upstream/master

当git在upstream/master上回放你的工作时,会出现冲突,你需要深入文件进行解决。然后你需要:

git add <files that you fixed>
git rebase --continue

谢谢。我收到了 fatal: 'upstream' does not appear to be a git repository 的错误信息。我应该在哪里查找上游仓库的名称? - Neil G
1
@NeilG 添加了一些如何设置上游仓库的内容。 - Paul H
有没有使用GitHub桌面版的方法可以实现这个? - Bennett
@Bennett 添加远程:是。变基/解决冲突:否。 - Paul H
@Paul H 刚刚发现了“从上游更新”按钮。不过还是谢谢你! - Bennett

8
实际上,您不再需要在本地拉取和重新库存。
自2016年12月以来,您可以直接从GitHub解决(简单的)合并冲突。
请参见“在GitHub上解决简单的合并冲突”。
引用:

现在,您可以直接从拉取请求中解决GitHub上的简单合并冲突,这样可以节省您去命令行的时间,帮助您的团队更快地合并拉取请求

请点击演示如何解决合并冲突观看演示。
引用:

新功能可帮助您解决由竞争性行更改引起的冲突,例如当人们在Git存储库的不同分支上对同一文件的同一行进行不同更改时。
您仍然需要在本地使用命令行解决其他更复杂的冲突


1
请勿使用此功能,如果您不想从头开始。有时候当您按下提交按钮时,整个系统会冻结,如果您意外地在鼠标上按下“回到上一页”的键,或者重新加载页面,您将不得不从0开始重新做整个过程。 - Random Dude
@RandomName 很好的观点。确实很不幸。 - VonC

7

尝试运行以下命令以查看您设置的远程主机:

git remote -v

如果你在 Github 上的原始仓库中还没有远程分支,你可以按照以下步骤添加它:
git remote add upstream https://github.com/networkx/networkx.git

这将为远程上游设置名称。之后,您可以将最新的上游合并到您的分支中,并解决冲突:

git fetch upstream
git merge upstream/master

如果第一个git remote -v命令已经显示了一个具有该名称的远程库,则只需使用该远程库而不是添加新的远程库。希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接