Git 日誌



命令 `git log` 預設情況下按反時間順序顯示提交日誌。此命令非常有用,因為它有助於跟蹤和理解專案的歷史記錄,瞭解誰做了更改以及何時更改。

用法

1. **檢視提交歷史** - 命令 `git log` 按反時間順序顯示提交日誌,這意味著最新的提交首先列出。

每個提交條目包含

  • 提交的唯一識別符號 **提交雜湊**。

  • 提交的作者。

  • 提交的日期和時間。

  • 提交訊息。

2. **過濾提交** - 可以使用不同的選項過濾提交歷史記錄,例如

  • `--author=` - 只顯示由指定作者完成的提交。

  • `--since` 或 `--until` - 顯示在特定日期之前或之後進行的提交。

3. **精簡輸出** - `git log` 的預設輸出通常很長且詳細,但有多種方法可以使其精簡。

  • `--oneline` - 每個提交都在一行中顯示,包含提交雜湊和提交訊息。

  • `--graph` - 顯示提交歷史的詳細圖形表示。這有助於視覺化分支和合並。

4. **顯示提交差異** - 可以使用選項 `--patch / -p` 檢視每個提交的差異 (diff)。

5. **限制提交數量** - 可以使用 `-n` 選項限制提交數量。可以為 n 值指定一個數字。

6. **按訊息搜尋提交** - 可以使用 `--grep` 選項搜尋提交。這將搜尋提交訊息中包含特定單詞或短語的提交。

7. **檢視特定檔案的提交** - 也可以檢視特定檔案的提交歷史記錄。您只需要在 `git log` 命令的末尾指定 ``。

語法

命令 `git log` 具有以下語法

git log

它顯示可以透過父連結從給定提交訪問的提交,但不包括以符號 `^` 為字首的提交。

git log feature-branch master ^bugfix-branch

該命令表示 **列出所有可從 feature-branch 或 master 訪問的提交**,但不包括可從 **bugfix-branch** 訪問的提交。

透過移除所有可從 **bugfix-branch** 訪問的提交,它有效地顯示了 **feature-branch** 和 **master** 獨有的提交。

在 Git 語法中,`..` 是 `^ ` 的快捷方式。

這意味著列表中將包含可透過 `` 訪問但不可透過 `` 訪問的提交。

例如,這些命令是可互換的

git log feature-branch..master

git log master ^feature-branch

這兩個命令實際上都表示列出可從 master 訪問但不可從 **feature-branch** 訪問的提交。

Git 計算兩組提交之間的對稱差,因此此格式 `..` 對合並特別有用。

它類似於使用此表示法執行更直接的集合差運算。

例如,它可以用來識別兩個不同分支之間的差異。

git log branch1 branch2 --not $(git merge-base --all branch1 branch2)
git log branch1...branch2

這兩個命令都生成可從分支 1 和 2 訪問的提交的對稱差。

此命令使用來自 `git-rev-list` 和 `git-diff` 命令的引數,允許修改顯示內容以及如何顯示每個提交引入的更改的選項。

選項

`git log` 提供以下選項

格式化選項

以下選項控制提交日誌的顯示方式

1. `--oneline` - 每個提交都顯示在一行中,包含提交雜湊和訊息。

git log --oneline

2. `--pretty=` - 可以選擇輸出格式,可能包括 `oneline`、`short`、`medium`、`full`、`fuller` 和 `format:`。

自定義格式有一些佔位符,如下所示:

  • `%H` - 提交雜湊

  • `%h` - 縮寫提交雜湊

  • `%an` - 作者姓名

  • `%ae` - 作者郵箱

  • `%ar` - 作者日期,相對時間

  • `%s` - 提交訊息

git log --pretty=short
git log --pretty=format:"%h - %an, %ar : %s"

3. `--graph` - 可以看到分支和合並歷史的 ASCII 圖表。

git log --graph

4. `--decorate[=short|full|auto|no]` - 使用此選項,可以在提交雜湊旁邊看到引用名稱。

它預設為 `auto`,基於終端輸出,確定如何顯示像 `refs/heads/`、`refs/tags/` 和 `refs/remotes/` 這樣的 ref 名稱以及提交資訊。

git log --decorate

5. `--no-decorate` - 使用此選項,無法在提交雜湊旁邊看到引用名稱。

git log --no-decorate

6. `--stat` - 每個提交引入的更改摘要。

git log --stat

過濾選項

以下選項可用於過濾提交日誌

1. `--author=` - 只顯示由給定作者完成的提交。

git log --author="John Doe"

2. `--grep=` - 在提交訊息中搜索特定模式。

git log --grep="fixed"

3. `--since=` 和 `--until=` - 可以顯示最近或早於指定日期的提交。

git log --since="2015-01-01" --until="2015-01-02"

4. `--after=` 和 `--before=` - 與前一個類似,但語法不同。

git log --after="2015-01-01" --before="2015-01-05"

5. `--all` - 可以看到所有分支的提交歷史。

git log --all

限制選項

以下選項可用於限制提交日誌

1. `-n ` - 可以使用 `-n` 選項限制提交數量。可以為 n 值指定一個數字。

git log -n=5

2. `-p` - 可以使用選項 `--patch / -p` 檢視每個提交的差異 (diff)。

git log -p

3. `--max-count=` - 這是限制提交數量的另一種方法。

git log --max-count=5

4. `--skip=` - 跳過指定的提交數量。

git log --skip=5

5. `--reverse` - 反轉提交順序。

git log --reverse

其他選項

其他一些雜項選項如下所示

1. `--follow` - 即使檔案被重新命名,`git log` 中的 `--follow` 選項也會跟蹤其歷史記錄,但這僅適用於跟蹤單個檔案。

git log --follow

2. `--decorate-refs=` - 透過將它們與給定模式匹配來修飾引用。

git log --decorate-refs="refs/heads/*"

3. `--decorate-refs-exclude=` - 透過將它們與給定模式匹配來排除引用。

git log --decorate-refs-exclude="refs/heads/*"

4. `--name-only` - 只顯示每個提交中更改的檔案的名稱。

git log --name-only

5. `--name-status` - 只顯示每個提交中更改的檔案的狀態,例如已新增、已修改或已刪除。

git log --name-status

6. `-S` - 搜尋新增或刪除給定字串的提交。

git log -S"fixed"

7. `--clear-decorations` - Git `log` 命令中的 `--clear-decorations` 選項預設情況下會擴充套件修飾以包含所有引用,並重置任何之前的 `--decorate-refs` 或 `--decorate-refs-exclude` 設定。

git log --clear-decorations

8. `--source` - Git `log` 命令中的 `--source` 選項列印在命令列中用於到達每個提交的 ref 名稱。

git log --source

選項組合

上述選項可以與 `git log` 命令組合使用,例如 `git log --all --name-only`、`git log --oneline --max-count=5` 等。

上述選項允許您自定義 `git log` 以滿足您的特定需求,無論您是在搜尋特定更改、分析分支的歷史記錄還是跟蹤問題和修復。

廣告