git log -1 -p stash @ {0}显示空补丁

时间:2016-03-18 16:34:51

标签: git git-diff git-log

要重新发布此行为,只需初始化一个新的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,...)

1 个答案:

答案 0 :(得分:2)

  

为什么会这样?

因为git log -1 -p没有显示带有多个父项的任何提交的差异。需要其他选项。通常,您可能希望选择git show以显示一个提交以及修补程序,这大部分是等效的,但添加--cc作为默认选项。明确添加可以使您获得git log的差异。

还有其他控制合并提交显示的选项:您可以使用-c获取更详细的--cc形式,-m以获得所有父母的常规差异( A和B),或将其与--first-parent组合以获得从A到C的普通差异。