git log -p против git show против git diff
Как команды git log -p
, git show
, а также git diff
связаны и почему один будет использоваться над другим?
Дано репо со следующими 4 коммитами:
commitd - последний коммит
commitc
commitb
комита - начальный коммит
Каковы различия между следующими командами 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
1 ответ
git log A B
показывает историю обоих коммитов A
а также B
(в основном генерирует объединенный набор истории каждого коммита). Обычно вы хотите git log A..B
, который также может быть записан как git log ^B A
(показать все достижимо от А, но нет (^
) из Б). Этот диапазон также может быть пустым (например, B..A
будет пустым, так как каждый коммит достижим от B
также достижим от A
). Таким образом, вы также не получаете вывод от git log
при использовании с "неправильными" аргументами.
git show
является очень универсальной командой и выдает различный вывод в зависимости от своих аргументов. Вы можете передать один или несколько коммитов, и он покажет вам информацию о коммите (авторство, метка времени, сообщение о коммите, различие от предыдущего коммита). Фиксация диапазонов, таких как a..d
будет решен, и каждый коммит будет показан индивидуально. Вы также можете пройти путь и git show
покажет вам содержимое файла. Вы также можете указать файл с определенной ревизией с помощью синтаксиса commit:path/to/file
, Если вы передаете каталог, git show
отобразит информацию о последнем коммите, изменяющем этот каталог.
git diff
обычно для сравнения требуется два дерева или два файла. (Он также может не принимать аргументов и сравнивать индекс / промежуточную область). Коммит автоматически разворачивается в соответствующее дерево (объект дерева описывает определенное состояние хранилища). Синтаксис A..B
молча решено A B
для случая diff и покажет изменения, необходимые для получения от commit / tree A
в B
Диапазон A...B
означает "каждый коммит, достижимый из A или B, но не из обоих".
- При использовании с
git log
он покажет вам эти коммиты, и это в основном имеет смысл только при использовании с разветвленными ветвями, т. е. "показать все различия между двумя, но скрыть те коммиты, которые имеют обе ветви". - За
git diff
этот синтаксис является синтаксическим сахаром дляgit diff $(git merge-base A B) B
то есть "изменения вB
с историиA
расходились. - С
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 --
$