Visual Studio Code如何使用git解决合并冲突?

262

我尝试将我的分支与另一个分支合并,但出现了合并冲突。在Visual Studio Code(版本1.2.1)中,我解决了所有问题,但是当我尝试提交时,它一直给我这个消息:

在提交更改之前,您应该先解决未合并的更改。

我已经尝试过搜索,但找不到为什么它不允许我提交更改,所有冲突都已经消失。


2
虽然你说的是正确的,但它并没有解决问题。我明确地说明了我已经在问题中解决了所有合并冲突。 - annedroiid
是的,在VS Code中解决冲突的材料确实很多,但是——“两者都已删除”的冲突怎么办!如果我按下“加号”(即“git add”),这会导致一个确认提示,然后IDE会挂起一段时间,然后文件就从更改中消失了(似乎没有作为删除进行暂存)。我认为这个功能需要改进! - Tomasz Gandor
当前的答案涵盖了“旧”的合并编辑器。对于新的三方合并编辑器,请查看这个详细指南,例如:终于发布了:VS Code中的3列合并编辑器! - Melebius
8个回答

259

使用 VSCode,你可以通过以下界面轻松找到合并冲突。 enter image description here

(如果你没有顶部栏,请在用户首选项中设置 "editor.codeLens": true)

它指示了你当前的更改和来自服务器的即将到来的更改。这使得解决冲突变得容易 - 只需按上方的按钮 <<<< HEAD

如果你有多个更改,并想一次性应用所有更改 - 打开命令面板(View -> Command Palette)并开始输入 merge - 将出现多个选项,包括 Merge Conflict: Accept Incoming 等等。


2
你收到最新的更新了吗!我会在每一行中展示。 - Sajeetharan
2
是的,它在每行都显示,只是没有接受传入更改的选项。 - RyeGuy
3
如何在 Visual Studio Code 中获取合并和解决冲突选项。 - user630209
2
如何启用它,有快捷方式吗?我在我的冲突文件中看不到该选项。 - user630209
1
@RyeGuy,那些选项是通过CodeLens显示的,因此您需要启用CodeLens(请参阅https://code.visualstudio.com/Docs/editor/editingevolved#_reference-information)。 - Geri Borbás
显示剩余7条评论

181
经过试错,我发现需要对具有合并冲突的文件进行暂存,然后才能提交合并。

1
是的,正确的。无论是合并冲突还是您正在尝试推送的本地提交,都需要在推送该提交之前进行暂存。 - surendrapanday
3
如果执行 git add . 后没有将所有文件提交到暂存区,可能是因为你当前所在的目录不是项目的根目录。请确认一下,这可能需要一些时间来弄清楚。如果确认当前在项目的根目录中,则可以使用 git add . 命令将所有文件提交到暂存区,然后就可以执行 git merge --continue 命令。 - bensadiku
5
解决合并冲突后,你必须先保存冲突文件,然后再将合并后的更改添加到暂存区。 - nclark
1
@nclark,你有没有找到一种在接收文件后自动保存的方法? - jackhowa
这解决了我的问题。必须从VS Code中分阶段处理2/7个文件。 - WhooNo

54
  1. 在左侧点击“源代码控制”按钮。
  2. 查看侧边栏中的合并冲突。
  3. 这些文件存在合并冲突。

VS Code > Source Control > Merge Changes (Example)


26
我曾经有“接受当前更改| 接受即将到来的更改……”选项,但现在这些选项在行中消失了,你有什么办法可以再次显示这些选项吗? - jet_choong
1
这在用户界面上非常容易。谢谢你指出侧边栏中的 合并更改 部分。 - klewis
我同意jet_choong的观点。尽管启用了“Merge-conflict › Code Lens”设置,但我不再获得蓝色/绿色高亮显示或“Accept Current Changes” CodeLens选项。有什么办法可以解决吗? - Patrick Szalapski

48

对于那些在找“合并按钮”方面遇到困难的人。

只有当你精确地点击“合并冲突标记”时,带有合并选项的小电灯泡图标才会出现:

<<<<<<<

步骤(在VS Code 1.29.x中):


8
我仍然看不到灯泡。 - volvox

18

如果您使用的是VS Code 1.38或者找不到“lightbulb”按钮,请仔细查看冲突上方变灰的文本; 那里有一些您可以采取的操作列表。


16

你看到的错误信息是由Git认为你还没有解决合并冲突导致的。实际上,你已经解决了,但你需要通过将已解决的文件添加到索引中告诉Git你已经这样做了。

这会产生一个副作用,即你实际上可以只添加文件而不解决冲突,Git仍然会认为你已经解决了冲突。因此,你应该努力确保你真正解决了冲突。你甚至可以在提交之前运行构建和测试代码。


1
如果出现冲突:使用 VS Code 逐个文件解决它们。在每个文件中完成合并后,点击 VS Code 中的“完成合并”按钮。 当所有文件都没有问题时,运行以下命令:
git commit

不要依赖于vs-code的“提交”按钮,它会变灰色,这是错误的。


0
在VSCode 1.70.2中,从源代码控制面板的合并视图中,在选定的冲突块中间的行号旁边,而不是在行上方的文本按钮上,有“yours”和“theirs”两侧的复选框。

在解决了此视图中的所有冲突后,您该怎么做?除了从“结果”窗格复制并粘贴到实际文件中,我似乎找不到应用更改的方法... - markmoxx

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