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

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

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

【问题讨论】:

  • 我的主要问题是如何在提交所有更改之前检查特定文件的差异。我猜 Git 日志用于提交的更改。
  • 根据我的经验,最好使用像GitKraken这样的可视化工具

标签: git git-svn


【解决方案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 文件名

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-02-11
                • 2013-10-02
                • 2018-08-18
                • 1970-01-01
                • 2023-01-23
                • 2015-10-15
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多