如何在 Visual Studio Code 中并排查看“git diff”文件?

205
我想知道如何在Visual Studio Code的终端中使用命令git diff master origin/master查看文件的差异。
我从远程仓库进行了git fetch,现在我想查看差异,但是该命令只会在终端中显示。
以下是我想要的示例:

Screenshot of diff viewer in Visual Studio Code

16个回答

4

你可以通过右键单击 EXPLOREROPEN EDITORS 中的文件,选择Select for Compare,再右键单击要与之比较的第二个文件,并选择Compare with <file_name_you_chose> 来比较任意两个文件。

或者,按下键盘上的 Ctrl + Shift + P,选择菜单 FileCompare Active File With...,然后会出现一个最近文件列表。例如:

Enter image description here


6
首先,该问题明确询问了关于 Git diff 的情况,这种情况下不会有两个文件,而只有一个文件。其次,您需要在 VS Code 中安装另一个扩展程序,例如“compareit”,以启用“选择比较”和“与所选项比较”的选项。 - KatariaA
@KatariaA:对于第二点:它似乎是默认安装的(Visual Studio Code 1.41.1(在Ubuntu 19.10上))。你能确认一下吗? - Peter Mortensen
1
@PeterMortensen 是的,它在那里,不需要扩展程序:https://code.visualstudio.com/docs/editor/versioncontrol#_viewing-diffs - rmcsharry

4

这里有另一种比较与之前版本的方法。

  1. Explorer 面板中。
  2. 选择要比较的文件,然后打开上下文菜单(右键单击),然后选择 Select for Compare
  3. 再次打开上下文菜单,然后选择 Open Timeline。等待加载以前的更改。
  4. Timeline 选项卡上,您可以选择以前的版本,然后打开上下文菜单并单击 Compare with Selected

然后您将看到不同的文件并排显示。

compare with previous


对我来说,差异始终是相同的(最近的)文件。但这将是一个非常好的工作流程。 - ahfx
对我来说,diff总是指最新的文件。但这确实是一个非常好的工作流程。 - undefined

3

Vscode本身可以显示任意两个文件之间的差异:

code --diff file1.txt file2.txt

我认为这与 git diff 功能是独立的。


2

如果你只需要在VSCode中快速查看单个文件的差异,而不需要进一步的集成导航和编辑体验,你可以像其他答案所解释的那样配置和使用git difftool,或者更安全(且全局适用)地进行如下操作:

git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"
git config --global diff.tool vscode   # optionally as default

要在VSCode中获得完全集成的自定义差异体验,请按照以下步骤操作:

# possibly commit or stash a dirty work tree before switching
git switch origin/master --detach  # new master in worktree
git reset master                   # old master as detached HEAD (diff base)

现在你可以像平常一样在VSCode中使用这个“自定义差异” - 作为工作树与HEAD的差异:使用git SCM图标,双击/右键单击文件更改,切换行内差异视图等。
现在你甚至可以直接在差异视图中对工作树进行操作。要提交这些更改,请执行以下操作:
git reset origin/master    # base for added changes only
# review the bare added delta again (in VSCode)
git add/commit ...
git branch/tag my_master_fixup   # name it

然后像往常一样合并新的主分支,切换回功能分支,可能需要挑选my_master_fixup,变基或者其他操作。

1
为了让这个答案有效,我们必须遵循一些步骤。尽管这些步骤已经在以前的答案中重复过了,但为了完整起见,我会重新写一遍。
打开文件~/.gitconfig,并添加以下行:
[diff]
    tool = default-difftool
[difftool "default-difftool"]
    cmd = code --wait --diff $LOCAL $REMOTE

在一些答案中,下一个建议步骤是执行git difftool <local_branch> origin/<remote_branch>

然而,还有另一种可能性:

git fetch origin <remote_branch>
git difftool FETCH_HEAD

此外,为了防止出现烦人的提示,我们可以做如下处理:
git config --global difftool.prompt false

0

来自v1.48发布说明:

当您浏览源代码控制视图时,按下空格键会将更改打开为预览编辑器,并将焦点保留在源代码控制视图中,以便更轻松地使用键盘进行导航。

因此,您可以通过向下箭头遍历您的scm文件更改,并按下空格键打开差异视图.. 焦点仍然停留在SCM视图中,因此您可以继续这样做。


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