使用git查看对特定文件的更改


472

我知道我可以使用git diff命令来检查更改,但是据我所知,它是基于目录的。这意味着它将给出当前目录中所有文件的所有更改。

如何只检查一个特定文件中的更改?说,我已更改的文件file_1.rbfile_2.rb......,file_N.rb但我只关心文件中的变化file_2.rb。然后(在提交之前)如何检查这些更改?



4
我的主要问题是在提交所有更改之前如何检查特定文件的差异。我猜Git日志用于已提交的更改。
梅隆

1
以我的经验,最好使用视觉工具,例如GitKraken
Giovanni Benussi,

Answers:


642

使用如下命令:

git diff file_2.rb

请参阅git diff文档,以获取有关可能会有所不同的各种信息的完整信息。

通常,git diff它本身会显示整个存储库中的所有更改(而不仅仅是当前目录)。


100
如果您想查看已经“ git add”修改过的文件,则为“ git diff --cached”
Ana Betts

8
如果您想检查文件对旧的承诺:$ git的差异[提交哈希] file_2.rb
亚历克斯·安吉利科

2
如何退出差异视图?
加里

1
或使用SourceTree。
GeneCode

4
@GurpreetsinghDhanju尝试按Q

110

另一种方法(在此SO答案中提到)将历史记录保留在终端中,并为您提供文件本身的深层跟踪记录:

git log --follow -p -- file

这将显示文件的整个历史记录(包括重命名后的历史记录以及每个更改的差异)。

换句话说,如果名为bar的文件曾经被命名为foo,则git log -p bar(不带--follow选项)将仅显示文件的历史记录,直到重命名为止-不会显示文件的历史记录,即foo。使用git log --follow -p bar将显示文件的整个历史记录,包括对文件的任何更改(称为foo)。


3
与--stat很好地配合使用,以概述添加/删除的行。
汤姆·黑尔

2
是的,这个答案应该至少排名更高,跟踪历史记录,而不仅仅是当前的差异,也不必跟踪所有的提交哈希值。非常简单的用法,但变化非常强大
Ilhicas


26

您可以使用以下命令查看谁更改了文件中的内容。

git blame <filename>


4
这是最好的答案,因为它告诉您进行了哪些更改,更改的时间以及提交的内容。要过滤特定的更改,只需执行short 是git blame <filename> | grep <searchfor>where <searchfor>的值。例如,要找出更改foobarin的人dist/index.php,您可以使用git blame dist/index.php | grep bar
Kraang Prime,

15

您可以执行

git status -s

这将显示修改后的文件名,然后通过复制感兴趣的文件路径,您可以使用查看更改 git diff

git diff <filepath + filename>


5

你也可以尝试

git show <filename>

对于提交,git show将显示日志消息和文本差异(在文件和文件的提交版本之间)。

您可以检查git show文档以获取更多信息。



0

完全同意@Greg Hewgill

如果路径中包含空格,则可以使用,请尝试使用撇号'或`

git diff'我的项目/我的文件夹/我的子文件夹/file_2.rb'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.