2014-09-01 209 views
13

git log -p,git show和git diff如何關聯以及爲什麼會使用另一個?git log -p vs git show vs git diff

鑑於回購有以下4個提交:

commitd - 最後提交
commitc
commitb
coomita - 初始提交

什麼是下面的git的命令之間的差異?:

git log -p commitb commitd 
git show commitb commitd 
git diff commitb commitd 

git log -p commitd commitb 
git show commitd commitb 
git diff commitd commitb 

git log -p commitb..commitd 
git show commitb..commitd 
git diff commitb..commitd 

git log -p commitd..commitb 
git show commitd..commitb 
git diff commitd..commitb 

git log -p commitb...commitd 
git show commitb...commitd 
git diff commitb...commitd 

git log -p commitd...commitb 
git show commitd...commitb 
git diff commitd...commitb 
+0

我打開了多個終端窗口,並運行所有的命令,但我不能得出有意義的任何概括。試圖找出我自己幾天後,沒有與我的谷歌福運氣我想我一定是錯過了一些東西,所以我在這裏發佈的問題。 – 2014-09-01 15:26:26

+1

請參閱[gitrevisions文檔](https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html)。如果你對圖論有所瞭解,它應該會有很大幫助;如果不是,它可能相當不透明。此外,似乎kernel.org手冊頁(我已鏈接到)已過時... – torek 2014-09-01 18:20:34

+1

@torek感謝您的優秀參考。除了知道Git使用DAG之外,我並沒有真正理解圖論,但我希望更多的初學者資源開始於對細節的解釋,因爲我不覺得100%自信我知道我的日常工作與Git的互動,雖然我現在已經經歷了很多次基礎。 – 2014-09-03 14:27:28

回答

20

git log A B顯示兩個提交的歷史記錄AB(基本上會生成每個提交歷史記錄的聯合集)。通常你想要git log A..B,它也可以寫成git log ^B A(顯示從A到達的所有東西,但是從B得到的而不是^))。此範圍也可以爲空(例如B..A將爲空,因爲從B可達到的每個提交也可從A到達)。因此,在與「錯誤」參數一起使用時,您也不會從git log獲得輸出。

git show是一個非常通用的命令,並根據其參數產生不同的輸出。您可以傳遞一個或多個提交,它會顯示提交信息(作者身份,時間戳,提交消息,以前提交的差異)。提交範圍如a..d將被解析並且每個提交都會單獨顯示。您也可以傳遞路徑,並且git show會顯示文件的內容。您還可以使用語法commit:path/to/file在某個修訂版中指定一個文件。如果你傳遞一個目錄,git show將顯示最後一次提交的提交信息,改變該目錄。

git diff通常期望兩棵樹或兩個文件進行比較。 (它也可以不採用參數,而是比較索引/分段區域)。一個提交會自動將解包成到其相應的樹中(樹對象描述了存儲庫的某個狀態)。語法A..B被靜默決心A B的差速器箱,並會顯示從提交/樹AB

範圍A...B意味着需要改變「每一個承諾到達從A或B,但不可兩者兼得」。

  • git log使用它會告訴你這些提交與發散的分支使用時大多才有意義,即「顯示每一個是兩者之間的不同,但隱藏那些兩個分支有共同提交」。
  • git diff這個語法是git diff $(git merge-base A B) B,即「自A發散的歷史B變化語法糖。
  • 隨着git show你只會得到承諾的信息對每個單在這個範圍內提交。

如果有什麼還不清楚,請在評論中告訴我。


下面是輸出你在你原來的問題貼庫:

$ git init 
Initialized empty Git repository in ... 
$ cd SO 
$ ls 
$ echo a > a 
$ git add a 
$ git commit 
[master (root-commit) 7b66fe5] initial commit 
1 file changed, 1 insertion(+) 
create mode 100644 a 
$ git tag a 
$ echo b >> a 
$ echo b > b 
$ git add a b 
$ git commit 
[master ee884fe] commit b 
2 files changed, 2 insertions(+) 
create mode 100644 b 
$ git tag b 
$ echo c >> a 
$ echo c >> b 
$ echo c > c 
$ git add a b c 
$ git commit 
[master 8abaaff] commit c 
3 files changed, 3 insertions(+) 
create mode 100644 c 
$ git tag c 
$ echo d >> a 
$ echo d > b 
$ git add a b 
$ git commit 
[master 08adc85] commit d 
2 files changed, 2 insertions(+), 2 deletions(-) 
$ git tag d 
$ git log -p b d -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 

commit ee884fea5d0266280845348175ac0af5083a9bbf 
Author: ... 
Date: Mon Sep 1 17:21:05 2014 +0200 

    commit b 

diff --git a/a b/a 
index 7898192..422c2b7 100644 
--- a/a 
+++ b/a 
@@ -1 +1,2 @@ 
a 
+b 
diff --git a/b b/b 
new file mode 100644 
index 0000000..6178079 
--- /dev/null 
+++ b/b 
@@ -0,0 +1 @@ 
+b 

commit 7b66fe5999039c53ffbe5a5ffe07c13a5c213455 
Author: ... 
Date: Mon Sep 1 17:20:39 2014 +0200 

    initial commit 

diff --git a/a b/a 
new file mode 100644 
index 0000000..7898192 
--- /dev/null 
+++ b/a 
@@ -0,0 +1 @@ 
+a 
$ git show b d -- 
commit ee884fea5d0266280845348175ac0af5083a9bbf 
Author: ... 
Date: Mon Sep 1 17:21:05 2014 +0200 

    commit b 

diff --git a/a b/a 
index 7898192..422c2b7 100644 
--- a/a 
+++ b/a 
@@ -1 +1,2 @@ 
a 
+b 
diff --git a/b b/b 
new file mode 100644 
index 0000000..6178079 
--- /dev/null 
+++ b/b 
@@ -0,0 +1 @@ 
+b 

commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 
$ git diff b d -- 
diff --git a/a b/a 
index 422c2b7..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,4 @@ 
a 
b 
+c 
+d 
diff --git a/b b/b 
index 6178079..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1 +1 @@ 
-b 
+d 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git log -p d b -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 

commit ee884fea5d0266280845348175ac0af5083a9bbf 
Author: ... 
Date: Mon Sep 1 17:21:05 2014 +0200 

    commit b 

diff --git a/a b/a 
index 7898192..422c2b7 100644 
--- a/a 
+++ b/a 
@@ -1 +1,2 @@ 
a 
+b 
diff --git a/b b/b 
new file mode 100644 
index 0000000..6178079 
--- /dev/null 
+++ b/b 
@@ -0,0 +1 @@ 
+b 

commit 7b66fe5999039c53ffbe5a5ffe07c13a5c213455 
Author: ... 
Date: Mon Sep 1 17:20:39 2014 +0200 

    initial commit 

diff --git a/a b/a 
new file mode 100644 
index 0000000..7898192 
--- /dev/null 
+++ b/a 
@@ -0,0 +1 @@ 
+a 
$ git show d b -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit ee884fea5d0266280845348175ac0af5083a9bbf 
Author: ... 
Date: Mon Sep 1 17:21:05 2014 +0200 

    commit b 

diff --git a/a b/a 
index 7898192..422c2b7 100644 
--- a/a 
+++ b/a 
@@ -1 +1,2 @@ 
a 
+b 
diff --git a/b b/b 
new file mode 100644 
index 0000000..6178079 
--- /dev/null 
+++ b/b 
@@ -0,0 +1 @@ 
+b 
$ git diff d b -- 
diff --git a/a b/a 
index d68dd40..422c2b7 100644 
--- a/a 
+++ b/a 
@@ -1,4 +1,2 @@ 
a 
b 
-c 
-d 
diff --git a/b b/b 
index 4bcfe98..6178079 100644 
--- a/b 
+++ b/b 
@@ -1 +1 @@ 
-d 
+b 
diff --git a/c b/c 
deleted file mode 100644 
index f2ad6c7..0000000 
--- a/c 
+++ /dev/null 
@@ -1 +0,0 @@ 
-c 
$ git log -p b..d -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git show b..d -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git diff b..d -- 
diff --git a/a b/a 
index 422c2b7..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,4 @@ 
a 
b 
+c 
+d 
diff --git a/b b/b 
index 6178079..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1 +1 @@ 
-b 
+d 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git log -p d..b -- 
$ git show d..b -- 
$ git diff d..b -- 
diff --git a/a b/a 
index d68dd40..422c2b7 100644 
--- a/a 
+++ b/a 
@@ -1,4 +1,2 @@ 
a 
b 
-c 
-d 
diff --git a/b b/b 
index 4bcfe98..6178079 100644 
--- a/b 
+++ b/b 
@@ -1 +1 @@ 
-d 
+b 
diff --git a/c b/c 
deleted file mode 100644 
index f2ad6c7..0000000 
--- a/c 
+++ /dev/null 
@@ -1 +0,0 @@ 
-c 
$ git log -p b...d -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git show b...d -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git diff b...d -- 
diff --git a/a b/a 
index 422c2b7..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,4 @@ 
a 
b 
+c 
+d 
diff --git a/b b/b 
index 6178079..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1 +1 @@ 
-b 
+d 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git log -p d...b -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git show d...b -- 
commit 08adc8512e63588e6f01533b2a0f762342521b05 
Author: ... 
Date: Mon Sep 1 17:22:06 2014 +0200 

    commit d 

diff --git a/a b/a 
index de98044..d68dd40 100644 
--- a/a 
+++ b/a 
@@ -1,3 +1,4 @@ 
a 
b 
c 
+d 
diff --git a/b b/b 
index 9ddeb5c..4bcfe98 100644 
--- a/b 
+++ b/b 
@@ -1,2 +1 @@ 
-b 
-c 
+d 

commit 8abaaff681be0bcaa16c946feb2989959348c9f4 
Author: ... 
Date: Mon Sep 1 17:21:40 2014 +0200 

    commit c 

diff --git a/a b/a 
index 422c2b7..de98044 100644 
--- a/a 
+++ b/a 
@@ -1,2 +1,3 @@ 
a 
b 
+c 
diff --git a/b b/b 
index 6178079..9ddeb5c 100644 
--- a/b 
+++ b/b 
@@ -1 +1,2 @@ 
b 
+c 
diff --git a/c b/c 
new file mode 100644 
index 0000000..f2ad6c7 
--- /dev/null 
+++ b/c 
@@ -0,0 +1 @@ 
+c 
$ git diff d...b -- 
$ 
+0

好吧,除了'git log AB'不會執行'A..B':'git log'的參數與'git rev-list'的處理方式相同,就產生修改檢查,這實際上是兩套工會的結合。 (否則一切都正確,雖然有時候'A..B'和'B..A'都是非空的。) – torek 2014-09-01 18:14:42

+0

@torek:謝謝你的擡頭。我已更正第一段。希望有沒有錯誤:) – knittl 2014-09-01 18:40:07

+0

@ knittl非常感謝您的詳細回覆 – 2014-09-03 14:23:18