1. 程式人生 > >10個例子教會你在Linux上檢視Git提交

10個例子教會你在Linux上檢視Git提交

Git的Log工具讓你能夠檢視一個專案之前的提交(Commit)的資訊。

Log命令最簡單的用法能夠列出對應於當前檢出(check out)分支(Branch)的提交。這些提交以時間順序排列,最近的提交最先出現。
git

1.列出所有提交

通過使用-all選項,你可以強制log工具顯示所有的提交(無論是否與當前檢出有關)。

$ git log --all
commit c36d2103222cfd9ad62f755fee16b3f256f1cb21
Author: Bob Smith
Date: Tue Mar 25 22:09:26 2014 -0300
Ut sit.
commit 97eda7d2dab729eda23eefdc14336a5644e3c748
Author: John Doe
Date: Mon Mar 24 10:14:08 2014 -0300
Mollis interdum ullamcorper sociosqu, habitasse arcu magna risus congue dictum arcu, odio.
.
.
.

2.顯示最近的n次提交

Git的Log工具的真正強大之處在於它的靈活性。各種各樣的選項,讓你不僅能夠以任意所需要的粒度來篩選提交,還能夠裁出你所需要的輸出格式。

對提交進行篩選最常見的方式就是限定輸出最近的n次提交。通過使用選項-就可以達到這一目的。請用你想要顯示的提交的個數替換掉。例如,要檢視最近的3次提交:

$ git log -3
commit c36d2103222cfd9ad62f755fee16b3f256f1cb21
Author: Bob Smith
Date: Tue Mar 25 22:09:26 2014 -0300
Ut sit.
commit 97eda7d2dab729eda23eefdc14336a5644e3c748
Author: John Doe
Date: Mon Mar 24 10:14:08 2014 -0300
Mollis interdum ullamcorper sociosqu, habitasse arcu magna risus congue dictum arcu, odio.
commit 3ca28cfa2b8ea0d765e808cc565e056a94aceaf5
Author: Bobby Jones
Date: Mon Mar 24 01:52:04 2014 -0300

Fermentum magnis facilisis torquent platea sapien hac, aliquet torquent ad netus risus.

3. 篩選提交的作者或提交人

另一種對提交進行篩選的常見方式是按照執行提交的人或者提交的作者來進行篩選。這需要用到選項-author和-committer。語法如下:

$ git log --author
git log --committer

author選項將輸出的結果限定為為作者的提交,而-commitrer選項將輸出結果限定為所執行的提交。多數情況下,提交的作者和提交者是同一個人(一般你都可以假定這種情況成立)。但是在一些情況下某個開發者將一個補丁提交稽核,最終可能並不是他完成程式碼的提交。

$ git log --author=Bob
commit c36d2103222cfd9ad62f755fee16b3f256f1cb21
Author: Bob Smith
Date: Tue Mar 25 22:09:26 2014 -0300
Ut sit.
commit 3ca28cfa2b8ea0d765e808cc565e056a94aceaf5
Author: Bobby Jones
Date: Mon Mar 24 01:52:04 2014 -0300
Fermentum magnis facilisis torquent platea sapien hac, aliquet torquent ad netus risus.
commit cfc101ad280f5b005c8d49c91e849c6c40a1d275
Author: Bob Smith
Date: Thu Mar 20 10:31:22 2014 -0300
Natoque, turpis per vestibulum neque nibh ullamcorper.
.
.
.

注意:注意這一選項是如何匹配所有符合條件的提交的,我們指定的是commit’s author的一個子串(上面的例子中,我們看到Bob Smith和Bobby Jones的提交都在篩選結果中)。

4. 按照“X天以前”篩選提交

很多時候,你都想要將篩選的結果限定在某個日期範圍內。你可以用-before選項和-after選項來實現這一目的:

$ git log --before
git log --after

可以是“yyyy-mm-dd”格式的字串。Git還能接受Ruby表示式,因此你可以按照下面的方式來檢視最近兩天的提交:

$ git log --after 2.days.ago
commit c36d2103222cfd9ad62f755fee16b3f256f1cb21
Author: Bob Smith
Date: Tue Mar 25 22:09:26 2014 -0300
Ut sit.
commit 97eda7d2dab729eda23eefdc14336a5644e3c748
Author: John Doe
Date: Mon Mar 24 10:14:08 2014 -0300
Mollis interdum ullamcorper sociosqu, habitasse arcu magna risus congue dictum arcu, odio.
commit 3ca28cfa2b8ea0d765e808cc565e056a94aceaf5
Author: Bobby Jones
Date: Mon Mar 24 01:52:04 2014 -0300
Fermentum magnis facilisis torquent platea sapien hac, aliquet torquent ad netus risus.

5.按照日期期間篩選提交

將兩個選項結合起來,就指定了一個日期範圍:

$ git log --after --before

例如,要檢視2014年2月2日的提交:

$ git log --after "2014-02-01" --before "2014-02-02"
commit 69e1684ae9605544707fc36a7bf37da93dc7b015
Author: Bob Smith
Date: Sun Feb 2 01:26:00 2014 -0400
Praesent tempus varius vel feugiat mi tempor felis parturient.

6.檢視每次提交的更改的Diff

用於定製輸出格式的選項:要檢視每次提交完整的diff,請使用選項-p(你可以認為p代表patch):

$ git log -p
commit c36d2103222cfd9ad62f755fee16b3f256f1cb21
Author: Bob Smith
Date: Tue Mar 25 22:09:26 2014 -0300
Ut sit.
diff --git a/foo.txt b/foo.txt
index 5554f5b..2773ba4 100644
--- a/foo.txt
+++ b/foo.txt
@@ -436,3 +436,4 @@ Fermentum mollis.
Lacus fermentum nonummy purus amet aliquam taciti fusce facilisis magna.
Viverra facilisi curae augue.
Purus ve nunc mi consectetuer cras.
+Ad, maecenas egestas viverra blandit odio.
commit 97eda7d2dab729eda23eefdc14336a5644e3c748
Author: John Doe
Date: Mon Mar 24 10:14:08 2014 -0300
Mollis interdum ullamcorper sociosqu, habitasse arcu magna risus congue dictum arcu, odio.
diff --git a/foo.txt b/foo.txt
index 9cdef98..5554f5b 100644
--- a/foo.txt
+++ b/foo.txt
@@ -435,3 +435,4 @@ Lacinia et enim suspendisse conubia lacus.
Fermentum mollis.
Lacus fermentum nonummy purus amet aliquam taciti fusce facilisis magna.
Viverra facilisi curae augue.
+Purus ve nunc mi consectetuer cras.
.
.
.

7.檢視每次提交的更改的概要

要檢視每次提交的更改的概要的話(增加或者減少的行數等等),請使用選項-stat:

$ git log --stat
commit c36d2103222cfd9ad62f755fee16b3f256f1cb21
Author: Bob Smith
Date: Tue Mar 25 22:09:26 2014 -0300
Ut sit.
foo.txt | 1 +
1 file changed, 1 insertion(+)
commit 97eda7d2dab729eda23eefdc14336a5644e3c748
Author: John Doe
Date: Mon Mar 24 10:14:08 2014 -0300
Mollis interdum ullamcorper sociosqu, habitasse arcu magna risus congue dictum arcu, odio.
foo.txt | 1 +
1 file changed, 1 insertion(+)

8.每次提交顯示一行結果

如果想要以單行的形式顯示單次提交的最簡資訊的話,請使用選項-oneline。每次提交將會以該次提交的雜湊值緊接著提交訊息(Commit Message)的形式在一行中出現:

$ git log --oneline
c36d210 Ut sit.
97eda7d Mollis interdum ullamcorper sociosqu, habitasse arcu magna risus congue dictum arcu, odio.
3ca28cf Fermentum magnis facilisis torquent platea sapien hac, aliquet torquent ad netus risus.
3a96c1e Proin aenean vestibulum sociosqu vitae platea, odio, nisi habitasse at, in lorem odio varius.
1f0548c Nulla odio feugiat, id, volutpat litora, adipiscing.
cfc101a Natoque, turpis per vestibulum neque nibh ullamcorper.
.
.
.

9.以ASCII圖形的方式檢視提交歷史

Git的Log工具還可以以ASCII藝術圖形的方式顯示提交歷史,只需要使用-graph選項就可以了。這一選項和前面的-oneline選項搭配使用有很好的效果。

$ git log --graph
* commit c36d2103222cfd9ad62f755fee16b3f256f1cb21
| Author: Bob Smith
| Date: Tue Mar 25 22:09:26 2014 -0300
|
| Ut sit.
|
* commit 97eda7d2dab729eda23eefdc14336a5644e3c748
| Author: John Doe
| Date: Mon Mar 24 10:14:08 2014 -0300
|
| Mollis interdum ullamcorper sociosqu, habitasse arcu magna risus congue dictum arcu, odio.
|
* commit 3ca28cfa2b8ea0d765e808cc565e056a94aceaf5
| Author: Bobby Jones
| Date: Mon Mar 24 01:52:04 2014 -0300
|
| Fermentum magnis facilisis torquent platea sapien hac, aliquet torquent ad netus risus.
.
.
.

10.格式化Git的Log輸出

要對Log輸出進行全面的格式化控制的話,請使用-pretty選項。這個選項在你想要將Log工具的輸出用於報告中的時候非常有用。該選項的語法如下:

$git log --pretty=format:""
The are specified in a similar way as formatted strings are in many languages. For example:
$ git log --pretty=format:"Commit Hash: %H, Author: %aN, Date: %aD"
Commit Hash: c36d2103222cfd9ad62f755fee16b3f256f1cb21, Author: Bob Smith, Date: Tue, 25 Mar 2014 22:09:26 -0300
Commit Hash: 97eda7d2dab729eda23eefdc14336a5644e3c748, Author: John Doe, Date: Mon, 24 Mar 2014 10:14:08 -0300
Commit Hash: 3ca28cfa2b8ea0d765e808cc565e056a94aceaf5, Author: Bobby Jones, Date: Mon, 24 Mar 2014 01:52:04 -0300
Commit Hash: 3a96c1ed29e85f1a119ad39033511413aad616d1, Author: John Doe, Date: Sun, 23 Mar 2014 06:05:49 -0300
Commit Hash: 1f0548cc700988903380b8ca40fd1fecfa50347a, Author: John Doe, Date: Fri, 21 Mar 2014 17:53:49 -0300
.
.
.

如果想要檢視所有可用的格式化選項的話,請查閱Git手冊的Log工具部分,或者線上瀏覽其文件

$git help log

最後需要注意的事情是,你可以以任意你喜歡的方式,組合使用這些選項。這讓你能夠同時定製查詢和格式化輸出。