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

Posted

技术标签:

【中文标题】使用 git 查看对特定文件的更改【英文标题】:See changes to a specific file using git 【发布时间】:2011-12-24 07:36:26 【问题描述】:

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

如何只检查一个特定文件中的更改? 比如说,我更改了文件file_1.rbfile_2.rb、...、file_N.rb,但我只对文件file_2.rb 中的更改。我如何检查这些更改(在我提交之前)?

【问题讨论】:

How to view file history in Git?的可能重复 我的主要问题是如何在提交所有更改之前检查特定文件的差异。我猜 Git 日志用于提交的更改。 根据我的经验,最好使用像GitKraken这样的可视化工具 【参考方案1】:

使用如下命令:

git diff file_2.rb

请参阅git diff documentation,了解有关您可以获得差异的各种事物的完整信息。

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

【讨论】:

如果你想查看你已经“git add”的文件更改,那就是“git diff --cached” 如果你想检查一个较旧的提交的文件:$ git diff [commit hash] file_2.rb 如何退出差异视图? 或者使用SourceTree。 @GurpreetsinghDhanju 试试按Q【参考方案2】:

您可以使用gitk [filename]查看更改日志

【讨论】:

这将显示文件上提交的历史记录,这有时可能是您需要的。【参考方案3】:

你可以执行

git status -s

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

git diff <filepath + filename>

【讨论】:

【参考方案4】:

或者,如果您更喜欢使用自己的 gui 工具:

git difftool ./filepath

您可以在这篇文章的指导下设置您的 gui 工具: How do I view 'git diff' output with a visual diff program?

【讨论】:

【参考方案5】:

另一种方法(在this SO answer 中提到)会将历史记录保留在终端中,并为您提供文件本身的非常深入的跟踪记录:

git log --follow -p -- file

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

换句话说,如果名为 bar 的文件曾经被命名为 foo,那么 git log -p bar(没有 --follow 选项)将只显示文件的历史记录,直到它被重命名——它不会t 显示文件被称为 foo 时的历史记录。使用 git log --follow -p bar 将显示文件的整个历史记录,包括文件被称为 foo 时的任何更改。

【讨论】:

与 --stat 配合得很好,可以概览添加/删除的行。 是的,这个答案至少应该排名更高,跟踪历史,而不仅仅是当前的差异,您也不必跟踪所有提交哈希。非常简单的用法但非常强大的变化【参考方案6】:

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

git blame &lt;filename&gt;

【讨论】:

这是最好的答案,因为它可以告诉您谁进行了哪些更改,以及更改属于哪个提交以及更改的时间。要过滤特定更改,只需执行git blame &lt;filename&gt; | grep &lt;searchfor&gt; 其中&lt;searchfor&gt; 是一个短值。例如,要找出谁将dist/index.php 中的foo 更改为bar,您可以使用git blame dist/index.php | grep bar【参考方案7】:

你也可以试试

git show <filename>

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

您可以查看git show Documentation了解更多信息。

【讨论】:

【参考方案8】:

完全同意@Greg Hewgill

如果您的路径包含空格,您可能会使用,尝试添加撇号 ' 或 `

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

【讨论】:

【参考方案9】:

仅列出特定文件更改的提交详细信息,

git log --follow file_1.rb

列出同一文件的各种提交之间的差异,

git log -p file_1.rb

仅列出提交及其消息,

git log --follow --oneline file_1.rb

【讨论】:

【参考方案10】:

你可以使用 tig :

sudo apt install tig

您只需在控制台中输入:tig

你可以有这样的东西,你可以浏览每个代码行的提交和本地更改

【讨论】:

【参考方案11】:

git diff 文件名

会给你 添加行为 + 删除的行为 -

【讨论】:

以上是关于使用 git 查看对特定文件的更改的主要内容,如果未能解决你的问题,请参考以下文章

如何运行 git log 以仅查看特定分支的更改?

使用 Git 版本控制查看文件的更改历史记录

如何从特定修订版更改 GIT 中提交的作者 [重复]

如何使用Web浏览器在git上的特定文件中查找diff

如何在 Git diff 和 merge 期间忽略某些特定文件和文件夹

Git status - 有没有办法只在特定目录中显示更改?