教你如何查看 Git 提交中發生了什麼變化

Git 提供了幾種方式可以幫你快速查看提交中哪些文件被改變。

如果你每天使用 Git,應該會提交不少改動。如果你每天和其他人在一個項目中使用 Git,假設 每個人 每天的提交都是安全的,你會意識到 Git 日誌會變得多麼混亂,似乎永恆地滾動着變化,卻沒有任何跡象表明修改了什麼。

那麼,你該怎樣查看指定提交中文件發生哪些變化?這比你想的容易。

查看提交中文件發生的變化

要想知道指定提交中哪些文件發生變化,可以使用 git log --raw 命令。這是發現一個提交影響了哪些文件的最快速、最方便的方法。git log 命令一般都沒有被充分利用,主要是因爲它有太多的格式化選項,許多用戶在面對很多選擇以及在一些情況下不明所以的文檔時,會望而卻步。

然而,Git 的日誌機制非常靈活,--raw 選項提供了當前分支中的提交日誌,以及更改的文件列表。

以下是標準的 git log 輸出:

$ git log
commit fbbbe083aed75b24f2c77b1825ecab10def0953c (HEAD -> dev, origin/dev)
Author: tuxDate:   Sun Nov 5 21:40:37 2020 +1300
    exit immediately from failed download
commit 094f9948cd995acfc331a6965032ea0d38e01f03 (origin/master, master)
Author: TuxDate:   Fri Aug 5 02:05:19 2020 +1200
    export makeopts from etc/example.conf
commit 76b7b46dc53ec13316abb49cc7b37914215acd47
Author: TuxDate:   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: tuxDate:   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: TuxDate:   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: TuxDate:   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 日誌可以生成一個內聯差異,用 --patch 選項可以逐行顯示每個文件的所有更改:

commit 62a2daf8411eccbec0af69e4736a0fcf0a469ab1 (HEAD -> master)
Author: TuxDate:   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

在這個例子中,“world” 這行字從 hello.txt 中刪掉,“opensource.com” 這行字則添加進去。

如果你需要在其他地方手動進行相同的修改,這些補丁patch可以與常見的 Unix 命令一起使用,例如 diff 與 patch。補丁也是一個好方法,可以總結指定提交中引入新信息的重要部分內容。當你在衝刺階段引入一個 bug 時,你會發現這裏的內容就是非常有價值的概述。爲了更快地找到錯誤的原因,你可以忽略文件中沒有更改的部分,只檢查新代碼。

用簡單命令得到複雜的結果

你不必理解引用、分支和提交哈希,就可以查看提交中更改了哪些文件。你的 Git 日誌旨在向你報告 Git 的活動,如果你想以特定方式格式化它或者提取特定的信息,通常需要費力地瀏覽許多文檔來組合出正確的命令。幸運的是,關於 Git 歷史記錄最常用的請求之一隻需要一兩個選項:--raw 與 --patch。如果你不記得 --raw,就想想“Git,什麼改變了?”,然後輸入 git whatchanged。

via: https://opensource.com/article/21/4/git-whatchanged

作者:Seth Kenlon 選題:lujun9972 譯者:DCOLIVERSUN 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

本文地址:https://www.linuxprobe.com/linux-git-look.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章