在 2 branches/commits 之间按文件检查差异文件的最佳方法?

Best way to check diff file by file between 2 branches/commits?

我刚刚完成了一个相当大的分支,我已经为此工作了 2 个多月。我只是将 master 重新定位到它并且不得不解决一些冲突。既然我已经重新定位了我的功能分支,我该如何逐个文件查看特色分支与主分支上比较的突出差异,以确保正确完成重新定位?

像这样:

git diff master

您一次可以提供一个文件:

git diff master -- some-file-path
git diff branch1..branch2

使用此命令,Git 将比较两个分支的尖端(也称为 HEAD)并显示可用于查看修改的“差异”重述。 简而言之,它将向您显示“branch2”拥有但不在“branch1”中的所有提交。

git diff branch1...branch2

使用带有三个点的“git diff”比较右分支的顶部(HEAD)与两个分支的共同祖先。

此处的大多数答案建议使用 git diff,但该方法的 con 是它在控制台中显示差异,这并不总是很方便。
这里有一些替代方案,它们将改为打开 GUI。

使用 Gitk
通常,当 git(尤其是 Windows 和 git-scm)时,您会得到一个名为 GitK 的 GUI 工具,可用于显示更改。所以,只需输入:

gitk --all

并且将打开 GUI,您可以在其中查看提交和每次提交所做的更改。

使用 DiffTool

改用 git difftool,并在首选差异工具中显示差异。
只需在控制台中键入 difftool 而不是 diff,如下所示:

查看两个分支之间的变化:

# For all the files
git difftool branch1..branch2

# For a single file
git difftool branch1..branch2 "filepath"

查看上次提交的更改

# For all the files
git difftool HEAD~1

# For a single file
git difftool HEAD~1 "filepath"

使用 ID(all/single 文件)查看自提交以来的更改:

# For all the files
git difftool commitId

# For a single file
git difftool commitId "filepath"

查看两次提交之间的变化:

# For all the files
git difftool commitId1..commitId2

# For a single file
git difftool commitId1..commitId2 "filepath"

备注

  • difftool 将打开您的默认差异工具,通常设置为 VimDiff。
    但是,如果您想将其更改为其他内容,只需将 id 更改为 this.
    在我的例子中,我使用了 Visual Studio as a diff tool,它是这样工作的:
  • 如果您仍然想在控制台中看到更改,只需将上面的命令与 git diff 一起使用,而不是 git difftool,方法是离开参数相同。