查找 Git 提交中的更改

Git 提供了几种方法,您可以快速查看提交中更改了哪些文件。
64 位读者喜欢这个。
An introduction to GNU Screen

Opensource.com

如果您每天都使用 Git,您可能会进行很多提交。如果您在与其他人合作的项目中每天都使用 Git,那么可以肯定地认为每个人都在进行大量提交。每一天。这意味着您意识到 Git 日志可能会变得多么令人困惑,无休止的变化滚动,而且看不到更改了什么。

那么,您如何找出特定提交中更改了哪些文件呢?这比您想象的要容易。

查找提交中更改了哪些文件

要查找给定提交中更改了哪些文件,请使用 git log --raw 命令。这是最快、最简单的方法来了解提交影响了哪些文件。git log 命令通常未被充分利用,这主要是因为它有太多的格式化选项,许多用户被太多的选择所淹没,并且在某些情况下,文档不清晰。

Git 中的日志机制非常灵活,--raw 选项提供了当前分支中的提交日志,以及每个已更改文件的列表。

这是标准 git log 的输出

$ git log
commit fbbbe083aed75b24f2c77b1825ecab10def0953c (HEAD -> dev, origin/dev)
Author: tux <tux@example.com>
Date:   Sun Nov 5 21:40:37 2020 +1300

    exit immediately from failed download

commit 094f9948cd995acfc331a6965032ea0d38e01f03 (origin/master, master)
Author: Tux <tux@example.com>
Date:   Fri Aug 5 02:05:19 2020 +1200

    export makeopts from etc/example.conf

commit 76b7b46dc53ec13316abb49cc7b37914215acd47
Author: Tux <tux@example.com>
Date:   Sun Jul 31 21:45:24 2020 +1200

    fix typo in help message

即使作者在提交消息中清楚地指定了更改了哪些文件,日志也相当简洁。

这是 git log --raw 的输出

$ git log --raw
commit fbbbe083aed75b24f2c77b1825ecab10def0953c (HEAD -> dev, origin/dev)
Author: tux <tux@example.com>
Date:   Sun Nov 5 21:40:37 2020 +1300

    exit immediately from failed download

:100755 100755 cbcf1f3 4cac92f M        src/example.lua

commit 094f9948cd995acfc331a6965032ea0d38e01f03 (origin/master, master)
Author: Tux <tux@example.com>
Date:   Fri Aug 5 02:05:19 2020 +1200

    export makeopts from etc/example.conf
    
:100755 100755 4c815c0 cbcf1f3 M     src/example.lua
:100755 100755 71653e1 8f5d5a6 M     src/example.spec
:100644 100644 9d21a6f e33caba R100  etc/example.conf  etc/example.conf-default

commit 76b7b46dc53ec13316abb49cc7b37914215acd47
Author: Tux <tux@example.com>
Date:   Sun Jul 31 21:45:24 2020 +1200

    fix typo in help message

:100755 100755 e253aaf 4c815c0 M        src/example.lua

这准确地告诉您哪个文件已添加到提交中以及文件是如何更改的(A 表示已添加,M 表示已修改,R 表示已重命名,D 表示已删除)。

Git whatchanged

git whatchanged 命令是一个遗留命令,早于日志功能。其文档表明您不应使用它,而应使用 git log --raw,并暗示它基本上已被弃用。但是,我仍然发现它是一个有用的快捷方式,可以获得(大部分)相同的输出(尽管排除了合并提交),并且我预计如果它被删除,我会创建一个别名。如果您不需要日志中的合并提交(如果您只想查看更改的文件,您可能不需要),请尝试 git whatchanged 作为一个简单的助记符。

查看更改

您不仅可以查看更改了哪些文件,还可以让 git log 显示文件中到底更改了什么。您的 Git 日志可以生成内联 diff,逐行显示每个文件的所有更改,使用 --patch 选项

commit 62a2daf8411eccbec0af69e4736a0fcf0a469ab1 (HEAD -> master)
Author: Tux <Tux@example.com>
Date:   Wed Mar 10 06:46:58 2021 +1300

    commit

diff --git a/hello.txt b/hello.txt
index 65a56c3..36a0a7d 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1,2 +1,2 @@
 Hello
-world
+opensource.com

在此示例中,从 hello.txt 中删除了单词“world”,并添加了新行“opensource.com”。

这些补丁可以与常见的 Unix 实用程序(如 diff 和 patch)一起使用,如果您需要在其他地方手动进行相同的更改。补丁也是总结特定提交引入的新信息的重要部分的好方法。当您在冲刺期间引入错误时,这是一个宝贵的概述。为了更快地找到错误的原因,您可以忽略文件中未更改的部分,而只查看新代码。

用于复杂结果的简单命令

您不必了解引用、分支和提交哈希来查看提交中更改了哪些文件。您的 Git 日志旨在向您报告 Git 活动,如果您想以特定方式格式化它或提取特定信息,通常需要浏览许多屏幕的文档来组合正确的命令。幸运的是,关于 Git 历史记录的最常见请求之一只需一两个选项即可:--raw--patch。如果您不记得 --raw,只需想,“Git,更改了什么?” 并键入 git whatchanged

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时进行。

评论已关闭。

© . All rights reserved.