我该如何展示一个提交(commit)的变更内容?

335

我知道的一个愚蠢的方法是:

git diff commit-number1 commit-number2

有更好的方法吗?

我的意思是,我想要知道提交1本身。我不想将提交2作为参数添加到它之前。


18
虽然 "git show <commit>" 是正确的解决方案,但你也可以使用 "git diff <commit>^!" 来获取提交与其(第一个)父提交之间的差异。有关详细信息,请参阅"man git-rev-parse(1)"。 - Jakub Narębski
向@Jakub致敬:在我看来,git diff <commit>^!就是答案。这就是你在github.com提交视图中看到的内容。 - Chris
6个回答

590

使用选项“-stat”如果您希望短输出。 - kingsjester

80

TL;DR

git show <commit>


Show

使用 show 命令查看提交记录的修改:

git show <commit> --stat

日志

展示一个范围内每个提交引入的差异,可以使用log命令:


git log -p <commit1> <commit2>

什么是<commit>

每个提交都有一个唯一的ID,我们在这里称其为<commit>。这个唯一的ID是SHA-1哈希值——存储内容及其头部的校验和。#TMI

如果你不知道自己的<commit>

  1. 使用git log命令查看提交历史

  2. 找到你关心的提交


5
git show --stat --> 一份非常简短的更改清单。 - Kamran Bigdely
SHA-1哈希是唯一的可能性吗?(不是反问)例如HEAD〜3呢? - Peter Mortensen
根据文档,您可以在几乎任何对象上使用此命令。 HEAD〜3 应该可以正常工作。 - Will Eccles
由于某些原因,在常规提交中,git show <commit>会提供详细的文件活动记录。然而,在合并提交中它不会这样做,只显示消息和元数据。我必须添加上面的 --show 来获取文件列表。 - Matt Molnar

71

能否

$ git log -p

你需要做什么?

查看 Git Community Book 中关于 Git Log 的章节以获取更多示例。(或查看文档。)

更新:正如其他人(JakubBombe)已经指出的那样:虽然上面的方法可以奏效,但git show实际上是旨在执行与所需完全相同的操作的命令。


33
我发现git show <commit> --stat是这里最好的选择。它可以简要概述提交内容并告诉你添加和修改了哪些文件,而不会给你太多东西,特别是如果你改变了很多文件。

7
这是我知道的一种方法。使用 git,似乎总有不止一种方法来完成它。
git log -p commit1 commit2

1

BomberJakub(谢谢!)的回答是正确的,在不同的情况下都适用于我。

为了快速浏览提交内容,我使用以下命令:

git show <replace this with your commit-id>

但是我喜欢以图形方式查看详细的差异,并将“P4diff”设置为我的Git差异。然后我使用

git diff <replace this with your commit-id>^!

"P4diff"是什么?它是否与Perforce相关? - Peter Mortensen
是的,实际上它就是p4merge.app - 正如可以从这个gist中看到的那样 - https://gist.github.com/tony4d/3454372 - 人们可以将p4merge应用程序设置为可视化差异工具。 - wat er

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