如何在 Visual Studio 代码并排文件中查看 'git diff'?

How can I see 'git diff' on the Visual Studio Code side-by-side file?

我想知道如何在 Visual Studio 代码的终端中使用命令 git diff master origin/master 查看文件。

我从我的远程存储库中执行了 git fetch,现在我想查看差异,但使用命令只在终端中显示。

我想要的示例:

在Visual Studio代码中,左侧有一个Git图标,如下所示:

通过单击此图标,然后双击 更改 下列出的文件之一,您可以看到两侧的 Git 差异。

您可以 diff 任意两个文件,方法是首先右键单击 EXPLOREROPEN EDITORS 列表中的文件,然后selecting Select for Compare 然后右键单击要比较的第二个文件并 select Compare with

或者通过键盘点击 Ctrl + Shift + P 和 select 菜单 FileCompare Active File With... 您将看到最近文件的列表。示例:

如果您想查看不同分支差异变化,还有一些额外的工作。例如,您想在 Feature 分支.

中查看最后 N 次提交的所有更改
  1. 将 Visual Studio 代码添加到 ~/.gitconfig 文件中,将其设置为默认 difftool。

    [diff]
        tool = vscode
    [difftool "vscode"]
        cmd = code --wait --diff $LOCAL $REMOTE
    
  2. 转到您的 Git 项目。输入:

    git difftool {{你要检查的分支}},例如 git difftool master

  3. 系统会提示您输入每个文件,是否要在 Visual Studio 代码中打开它。

打开 Visual Studio 中的文件 ~/.gitconfig 代码:

code  ~/.gitconfig

~/.gitconfig中复制以下行:

[diff]
    tool = default-difftool
[difftool "default-difftool"]
    cmd = code --wait --diff $LOCAL $REMOTE

保存更改。通过 运行 Ctrl + Shift + ` 在 Visual Studio 代码中打开一个终端。 运行 在终端中输入以下命令:

git difftool master origin/master

我回答过类似的问题

但基本上你可以使用下面的命令:

git difftool -x "code --wait --diff"

您可以在 Visual Studio 代码中实现此

  1. 打开设置(在 window/linux 文件 > 首选项 > 设置。 在 macOS 代码 > 首选项 > 设置上)
  2. 搜索差异
  3. 具体设置为Diff Editor:Render Side by Side。标记复选框。

这是查看自上次提交(在当前分支上)以来所做更改的简单方法:

  1. 单击 VS Code 左侧的 Git 图标
  2. 如果您在上次提交后对文件进行了更改,您将看到 "CHANGES"
  3. 下列出的文件
  4. 右键单击文件名(在 "CHANGES" 下)并单击 "Open Changes"
  5. 这将并排打开文件的两个版本并突出显示更改

经过几个小时的搜索、安装和卸载扩展,这似乎已经在 VSC 中实现了。

只需点击右上角的图标 - "Open changes"

然后返回到仅查看文件,而不是更改,方法是单击...右上角的图标 - "Open file"

现在可以切换内联视图(在 3 个点上)

来自v1.48 release notes

As you navigate the Source Control view, pressing Space on a change will now open it as a preview editor and keep the focus in the Source Control view, for easier keyboard navigation.

因此您可以 向下箭头 通过您的 scm 文件更改并点击 Space 打开差异视图。焦点仍然存在在 SCM 视图中,以便您可以继续这样做。

对于 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 图标,double/right-click文件更改、切换内联差异视图等。

现在您甚至可以直接在差异视图中直接处理该工作树。要提交此类更改,请执行以下操作:

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

然后像往常一样合并新的 master,切换回功能分支,可能会选择 my_master_fixup、rebase 或其他任何东西..

如果您想在两个任意引用之间进行比较 - 例如在分支与分支之间进行比较,或者在一个提交与另一个提交之间进行比较 - 并且仍然可以轻松地一次查看所有文件,就像我们看到索引更改一样。

  • 安装 GitLens 扩展程序
  • 转到左侧窗格中的源代码管理。 如果你没有这个图标,那么你可以在菜单 View -> SCM (Show source control) 下查看或使用定义的快捷方式。
  • 展开最后一部分搜索并比较
  • 单击按钮 比较参考...
  • 选择引用,然后您将看到已更改文件的列表,单击一个文件将并排显示其更改。

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

code --diff file1.txt file2.txt

我相信这与 git diff 功能无关。

为了使这个答案有效,我们必须遵循几个步骤,尽管在以前的答案中已经重复了这些步骤,但为了完整起见,我将重写它们。

打开文件 ~/.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