2014-09-01 21 views
13

Komutlar git log -p, git show ve git diff ile ilgili ve neden diğeri üzerinde kullanılmalı?git log -p vs. git show vs. git

Aşağıdaki 4 kaydedilmesini içeren bir repo Verilen:

commitd - son tamamlama
commitc
commitb
coomita - ilk taahhüt aşağıdaki git komutları arasındaki farklar nelerdir

?:

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

Birden terminali pencereleri açtı ve tüm komutları koştu ama mantıklı hiçbir genelleme çizemezdi:


Burada çıkış orijinal soruya gönderilmiş depo bulunuyor. Birkaç günlüğüne kendi kendime anlamaya çalıştıktan sonra ve google-fu'mda hiç şans bulamadıktan sonra, bir şeyi kaçırmam gerektiğini düşündüm, bu yüzden burada bir soru yayınladım. –

+1

Bkz. [Gitrevisions belgeleri] (https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html). Grafik teorisi hakkında bir şey biliyorsanız, çok yardımcı olmalı; eğer değilse, oldukça opak olabilir. Ayrıca, kernel.org sayfalarının (bağlantı kurduğum) sayfaları çıktığı anlaşılıyor ... – torek

+1

@torek Mükemmel referans için teşekkürler. Gitmek istediğimi bilmeden dışarı çıksın, ama gitgide daha çok başlangıçtaki kaynakların detaylarıyla ilgili bir açıklama yaparak başladığına inanıyorum çünkü% 100 eminim kendimi günlük olarak ne yapacağımı biliyorum. Git ile etkileşimlerim olsa da, şu anda birkaç kez temelden geçtim. –

cevap

20

git log A B, her ikisi de A ve B öğelerinin geçmişini gösterir (temel olarak her işlemin geçmişinin birleşim kümesini oluşturur). Genellikle git log A..B, git log ^B A olarak da yazılabilir (A'dan ulaşılabilir olan her şeyi gösterebilir, ancak (^) B). Bu aralık da boş olabilir (örneğin B adresinden erişilebilen her kaynağa da A'dan erişilebildiği için B..A boş olur). Bu nedenle, "yanlış" bağımsız değişkenlerle kullanıldığında git log'dan da çıktı almazsınız.

git show çok yönlü bir komuttur ve bağımsız değişkenlerine bağlı olarak farklı çıktılar üretir. Bir veya birkaç taahhütte bulunabilirsiniz ve size taahhüt bilgisini gösterecektir (yazarlık, zaman damgası, taahhüt mesajı, önceki taahhütten fark). a..d gibi taahhüt aralıkları çözülecek ve her bir taahhüt ayrı ayrı gösterilecektir. Bir yolu da geçirebilirsiniz ve git show dosya içeriğini size gösterecektir. Ayrıca, commit:path/to/file sözdizimi ile belirli bir revizyonda bir dosya da belirtebilirsiniz. Bir dizini geçirirseniz, git show bu dizini değiştiren son işlemin taahhüt bilgilerini görüntüler. Genel olarak iki ağaç veya iki dosyayı karşılaştırmak üzere bekler. (Ayrıca argüman alamaz ve dizin/aşama alanını karşılaştırır). Bir taahhüt, karşılık gelen ağacına (bir ağaç nesnesi, deponun belirli bir durumunu açıklar) otomatik olarak paketlenmemiş olur. sözdizimi A..B sessizce fark vaka için A B çözümlenir ve B

A...B demektir aralığı ağacın A/taahhüt almak için gerekli değişiklikleri gösterir "Her A veya B den ulaşılabilir işlemek, ancak ikisini dan". git log kullanıldığında

  • size bu teslimleri gösterecektir ve ayrılmış bir dalları ile kullanıldığında çoğunlukla sadece mantıklı, yani "göstermek ikisi arasında farklı olduğunu her, ama her iki şube ortak olan bu teslimleri gizlemek".
  • git diff için bu sözdizimi ayrıldığı A tarihinin beri B değişiklikler, yani" git diff $(git merge-base A B) B için sözdizimsel şeker olduğunu. Bu aralıktaki taahhüt sadece her bir ilgili bilgileri işlemek alacak git show ile
  • .

Bir şey hala net değilse, yorumlarda bana bildirin.

$ 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

Eh, 'git günlüğü AB'' yi yapmaz. A..B': 'git günlüğü' için argümanlar 'set rev-list' ile aynı şekilde ele alınır. denetlemek için revizyonlar, ve bu aslında iki kümenin birliği. (Aksi halde, her ikisi de, A.B'nin ve "B..A" nın boş olmadığı durumlar olsa da, doğrudur.) – torek

+0

@torek: Başlıklar için teşekkürler. İlk paragrafı düzelttim. Umarım hiçbir hata kalmaz :) – knittl

+0

@knittl detaylı yanıt için çok teşekkürler –