如何获取第一次提交的 Git 差异?

57

我创建了一个仓库,在里面创建了一个文件,向文件中添加一些内容并提交了这个文件。现在,我想查看该提交的差异,理想情况下应该显示被添加的文件和其中添加的行。

然而,git diff HEAD^ HEAD 返回 fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.,可能是因为这是该仓库的第一个提交。

如何解决这个问题?是否仍有办法查看在第一个提交中添加的文件的差异?


4
git show 命令可以使用。但第一个差异(diff)始终是从 null 到整个内容。 - ElpieKay
@ElpieKay 这个方法可以,但是它也包括提交说明。如果我使用 git show <文件>,有可能只打印差异而不是提交说明吗? - Ali
git show <commit> --pretty=%% | sed 1,2d。%% 可以是任何占位符,例如 %h%t,只输出一行。 - ElpieKay
4个回答

141

您可以做:

git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD

4b825dc642cb6eb9a060e54bf8d69288fbee4904 是 Git 中“空树”的 ID,每个仓库中都始终可用。


7
@CharlesBaley,很酷,你从哪里获得这个SHA-1代码? - gzh
9
只要 Git 继续使用 sha1,空树的 id 就不会改变。您可以使用 $(printf '' | git hash-object -t tree --stdin) 以获得更好的可读性。 - CB Bailey
9
我记得常见的SHA1值。 - CB Bailey
21
对我来说这太有趣了。为什么不为此添加一个命名标志呢?比如 git diff --empty-tree head。就像我们在交互式变基时有 --root 标志一样。 - Daniel Waltrip
1
Git 现在支持 SHA256,因此您不能总是依赖于此哈希 ID。 "git init --object-format = sha256 && git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD" 返回错误。 - Corey
显示剩余5条评论

5

现在Git已经对SHA256提供了实验性支持,同时还有从SHA1迁移到SHA256的过渡计划,因此您不能再依赖空树的哈希常量。相反,最好根据您的存储库使用的哈希函数动态检索它:

git diff $(git hash-object -t tree /dev/null)

1
也许可以尝试以下方法:
git log -p -n 1

1
这并不显示第一个提交。它显示最近的提交。这不是对所提出问题的答案。 - ErikE

0
你可以尝试以下命令:
``` git show ```
如果你只有一个提交,那么可以直接使用以下命令:
``` git show HEAD ```

它没有显示出差异。 - Yasushi Shoji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接