git log -1 -p stash@{0} 显示空补丁
git log -1 -p stash@{0} shows empty patch
要重现此行为,只需初始化一个新的 git 存储库,创建一个文件,添加并提交。现在再次编辑此文件(这次不添加,不提交)并存储。结果应如下所示:
$ git log stash@{0} --graph --decorate
* commit C (refs/stash)
|\ Merge: A C
| | WIP on master: A init
| |
| * commit B
|/ index on master: A init
|
* commit A (HEAD, master)
init
A 和 C 之间的差异显示了预期的结果:
$ git diff stash@{0}^..stash@{0}
diff --git a/file b/file
index b1b7161..51bdcb4 100644
--- a/file
+++ b/file
@@ -1 +1,2 @@
+a new uncommited change
init
我希望命令的输出相同
$ git log stash@{0}
但是没有补丁。为什么会这样?
(这与存储无关:如果您使用空提交、no-ff 等创建历史记录,行为相同)
Why does this happen?
因为 git log -1 -p
不显示 any 与多个 parents 提交的差异。为此需要其他选项。通常,您可能希望选择 git show
来显示单个提交以及补丁,这在很大程度上是等效的,但将 --cc
添加为默认选项。显式添加也会使您与 git log
有所不同。
还有其他选项用于控制合并提交的显示:您可以使用 -c
获得更详细的 --cc
形式,-m
获得所有的常规差异parents(A 和 B),或将其与 --first-parent
结合以获得从 A 到 C 的简单差异。
要重现此行为,只需初始化一个新的 git 存储库,创建一个文件,添加并提交。现在再次编辑此文件(这次不添加,不提交)并存储。结果应如下所示:
$ git log stash@{0} --graph --decorate
* commit C (refs/stash)
|\ Merge: A C
| | WIP on master: A init
| |
| * commit B
|/ index on master: A init
|
* commit A (HEAD, master)
init
A 和 C 之间的差异显示了预期的结果:
$ git diff stash@{0}^..stash@{0}
diff --git a/file b/file
index b1b7161..51bdcb4 100644
--- a/file
+++ b/file
@@ -1 +1,2 @@
+a new uncommited change
init
我希望命令的输出相同
$ git log stash@{0}
但是没有补丁。为什么会这样? (这与存储无关:如果您使用空提交、no-ff 等创建历史记录,行为相同)
Why does this happen?
因为 git log -1 -p
不显示 any 与多个 parents 提交的差异。为此需要其他选项。通常,您可能希望选择 git show
来显示单个提交以及补丁,这在很大程度上是等效的,但将 --cc
添加为默认选项。显式添加也会使您与 git log
有所不同。
还有其他选项用于控制合并提交的显示:您可以使用 -c
获得更详细的 --cc
形式,-m
获得所有的常规差异parents(A 和 B),或将其与 --first-parent
结合以获得从 A 到 C 的简单差异。