在同一分支、同一次提交中比较两个文件的差异。

124

很抱歉,如果这个问题已经存在,我惊讶地找不到它 :/

如何在同一分支和相同提交中对两个文件执行git diff?

例如:git diff fileA.php fileB.php

(最好使用易于阅读的颜色编码,就像git提供的那样...或类似于BeyondCompare程序所做的!)


注意:Git:如何比较不同提交中的两个不同文件?比这个问题稍微通用一些,但答案本质上与这个问题的正确答案相同,并且它没有所有那些虚假的答案,所以我已经投票将其作为重复项关闭。 - SamB
6个回答

296
如果你想对任意两个文件使用 git diff,可以使用 git diff --no-index <file_a> <file_b> 命令。这两个文件不需要在 git 中跟踪。

38
+1 回答了初始问题(不考虑“为什么要这样做”……可能有原因)。 - NobodysNightmare
22
--word-diff 会按单词而不是行来显示更改。 - user3148949
2
对于我们使用 PowerShell 的人来说,这是在仓库中获取两个文件差异的一种更简单的方法。 - Ifrit
3
当按“活跃度”排序时,为什么下面这个优秀的答案排在两个先前的、得票较少(且不太有用)的答案之后?我甚至没有计算被标记为正确的答案。无论如何,谢谢! - j_random_hacker
在GNU diffutils 3.4+(2016-08-08)中,diff具有--color选项,可能会有所帮助(请参见https://unix.stackexchange.com/a/338960)。但即使如此,如果使用`diff-so-fancy`,似乎仍需要`git diff的特定输出格式。 diff -u`(请参见https://dev59.com/3W445IYBdhLWcg3wcJ6O#4857407)无法正常工作。 - kelvin
一个很好的理由是你在Windows上安装了git,但没有diff。 - Jason

91

不需要使用git,只需使用diff fileA.php fileB.php(或者如果你想要并排比较则使用vimdiff)。


27
vimdiff 很棒!谢谢! - d-_-b
26
可能能够起作用,但这不是 git diff。这是完全不同的输出格式。 - daboross
12
这并没有回答原来的问题。 - DylanYoung
8
我不同意,尽管原帖可能不太清晰,但他提到了BeyondCompare这一事实表明他并不是特别在寻找“git diff”,而只是想要一个易于阅读的差异比较工具。此外,他接受了我的答案也说明它确实回答了他的问题。 - JaredMcAteer
我尝试使用文件路径,但它没有起作用。我们可以像这样使用吗 'git diff d:\project\sample.txt d:\project\newfolder\sample2.txt'? - Kapila Ranasinghe
3
请仔细阅读答案。命令是 diff fileA fileB 而不是 git diff fileA fileB - Matthew Hinea

18
如果您想比较的文件在您的工作副本中,您可以像其他人指出的那样简单地使用“diff”,但是如果文件在某个修订版本中,您可以为每个文件指定一个修订版本。
git diff <revision_1>:<file_1> <revision_2>:<file_2>

如此记录在这里: https://dev59.com/UHA75IYBdhLWcg3wW3sZ#3343506

在您的情况下(为两个文件指定相同版本):

git diff <revisionX>:fileA.php <revisionX>:fileB.php

2
注意:修订版本可以是HEAD~2、SHA-1、分支名称等。 - ma11hew28
这对我很有用,只需比较两个不同目录中的文件名:在git add两个目录后, git diff --name-only HEAD:dir1 HEAD:dir1_backup就能够工作。 - Frank Forte
1
如果修订版未检出到工作树中,或者工作树文件已修改且希望对原始文件进行差异比较,或者根本没有工作树(如在裸的 git 存储库中),则此方法有效。不幸的是,这个评价很高的问题有一些同样受欢迎的答案,回答了一个仍然有用但相当不同的问题,“如何在不使用 git 的情况下获得类似 git-diff 的输出?” - TrentP

6
为了使普通的gnu diff更像git diff,我建议使用以下参数:
diff -burN file_or_dir1 file_or_dir2

(其中-b忽略空格,-u统一差异,-r递归,-N将缺失的文件视为/dev/null。)

它的工作非常出色,但仍然没有颜色和类似于git风格的自动分页功能几乎不存在。如果你想同时解决这两个问题(我是这样做的),请安装colordiff并像这样使用它:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

这将提供非常接近实际 git diff 的输出和界面。


4
-1 是因为“你不能”的说法是不正确的(参见:https://dev59.com/V2Yr5IYBdhLWcg3wFGZS#13965200) - NobodysNightmare
删除“你不能”,添加安装colordiff的说明,这可能是对原始问题的一个不错的答案。 - DylanYoung
因为建议使用colordiff而点赞,我最近学到了它,但总是忘记使用它。 - Hashim Aziz
这与同一文件的版本比较有关,因此在这种情况下比较两个不同的文件是不正确的。 - Artem Kozlenkov

0
如果你想比较同一目录下的两个本地文件,只需使用diff命令即可。
diff fileA.php fileB.php

这并没有回答原始问题。 - DylanYoung
https://dev59.com/dWw15IYBdhLWcg3wCXKJ - morewry

-4

只需使用常规的差异比较工具即可。

diff -Nua fileA.php fileB.php

8
-1 是因为“你不能”是不正确的(参见:https://dev59.com/V2Yr5IYBdhLWcg3wFGZS#13965200) - NobodysNightmare

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