1978

当我这样做时,git diff COMMIT我看到了该提交和 HEAD 之间的更改(据我所知),但我想查看该单个提交所做的更改。

我没有在diff/上找到任何明显的选项log来给我那个输出。

4

23 回答 23

2465

要查看特定COMMIT哈希的差异,COMMIT提交的哈希在哪里:

git diff COMMIT~ COMMIT将向您展示 that COMMIT's 的祖先和COMMIT. 有关命令的详细信息,请参阅git diff的手册页以及有关符号及其朋友的gitrevisions 。~

或者,git show COMMIT会做一些非常相似的事情。(提交的数据,包括它的差异 - 但不包括合并提交。)请参阅git show 手册页

(还将向您展示它与头部git diff COMMIT之间的区别。)COMMIT

于 2013-07-10T06:23:49.177 回答
596

如“ Shorthand for diff of git commit with its parent? ”中所述,您还可以使用git diff

git diff COMMIT^!

或者

git diff-tree -p COMMIT

使用 git show,您需要(为了只关注 diff)执行以下操作:

git show --color --pretty=format:%b COMMIT

COMMIT参数是commit -ish

提交对象或可以递归取消引用到提交对象的对象以下都是commit-ish:一个提交对象,一个指向提交对象的标签对象,一个指向一个指向提交对象的标签对象的标签对象,等等。

请参阅gitrevision "SPECIFYING REVISIONS"以引用 commit-ish。
另请参阅“ Git 中的 tree-ish 是什么意思? ”。

于 2013-07-10T06:31:03.333 回答
482

你也可以试试这个简单的方法:

git show <COMMIT>
于 2016-06-15T09:02:28.373 回答
102

git show显示在最近一次提交中所做的更改。它相当于git show HEAD

git show HEAD~1带你回一次提交。

于 2016-09-16T01:50:15.093 回答
62

我通常这样做:

git diff HEAD~1

显示有关上次提交的更改。如果您有更多提交,只需将数字 1 增加到您想要查看的提交 diff 数。

于 2019-04-03T11:53:27.830 回答
48

采用:

git show <commit_sha>

这将向您展示该提交中的内容。您可以通过在两个提交 SHA-1 哈希之间放置一个空格来确定范围。

git show <beginning_sha> <ending_sha>

如果您经常变基,这将非常有用,因为您的功能日志将全部排成一行。

如果您碰巧想查看最后 3 次提交,您可以使用 HEAD 语法

git show HEAD~3 HEAD
于 2018-08-22T14:46:12.927 回答
40

首先使用获取提交 ID,

git log #to list all

或者

git log -p -1 #last one commit id

复制提交 ID。

现在我们使用两种方法列出来自特定提交的更改,

方法一:

git diff commit_id^! #commit id something like this 1c6a6000asad012

方法二:

git show commit_id
For example: git show 1c6a600a
于 2017-07-19T05:48:34.667 回答
30

从git-diff(1)的手册页:

git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

使用中间的第三个:

git diff [options] <parent-commit> <commit>

同样来自同一个手册页,在底部的示例部分

$ git diff HEAD^ HEAD      <3>

比较最后一次提交和最后一次提交之前的版本。

诚然,它的措辞有点令人困惑,它会不那么令人困惑,因为

将最近的提交与之前的提交进行比较。

于 2013-07-10T07:20:58.123 回答
24

以下似乎可以完成这项工作;我用它来显示合并带来的内容。

git whatchanged -m -n 1 -p <SHA-1 hash of merge commit>
于 2014-10-14T17:16:59.767 回答
23

另一种可能:

git log -p COMMIT -1
于 2016-02-16T14:49:39.047 回答
16

对我来说,这很好用

git show COMMIT --compact-summary

显示下一个信息

输出扩展头信息的简明摘要,例如文件创建或删除(“new”或“gone”,如果是符号链接,则可选“+l”)和模式更改(“+x”或“-x”用于添加或删除diffstat 中的可执行位)。信息放在文件名部分和图形部分之间。暗示--stat。

于 2021-07-21T17:48:18.200 回答
15

我喜欢下面的命令来比较一个特定的提交和它的最后一个提交:

git diff <commit-hash>^-

例子:

git diff cd1b3f485^-
于 2018-04-10T10:11:15.110 回答
12

您可以使用git diff HEAD HEAD^1查看与父提交的差异。

如果您只想查看文件列表,请添加该--stat选项。

于 2015-12-08T04:17:59.880 回答
9
git difftool COMMIT^ <commit hash>

如果你已经配置了你的 difftool 也是可能的。

请参阅此处如何配置 difftool或此处的手册页。

此外,您可以使用git diff-tree --no-commit-id --name-only -r <commit hash>在给定的提交哈希中查看哪些文件已更改/提交。

于 2014-03-24T12:49:54.753 回答
9

要按提交查看作者和时间,请使用git show COMMIT. 这将导致这样的事情:

commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date:   Fri Jul 24 17:46:42 2015 -0700

     Merge remote-tracking branch 'origin/your-feature'

如果您想查看哪些文件已更改,请使用上面Merge行中的值运行以下命令,git diff --stat a2a2894 3a1ba8f.

如果您想查看实际差异,请运行git --stat a2a2894 3a1ba8f.

于 2015-07-27T22:20:05.713 回答
9

如果您只想查看最新提交中的更改,只需git show提供给您。

于 2020-01-08T12:37:17.277 回答
8

以下代码将显示当前提交

git show HEAD
于 2020-10-23T04:29:24.100 回答
7

检查完整的更改:

  git diff <commit_Id_1> <commit_Id_2>

仅检查更改/添加/删除的文件:

  git diff <commit_Id_1> <commit_Id_2> --name-only

注意:为了检查 diff 而没有在两者之间提交,您不需要放置提交 ID。

于 2019-01-29T19:41:54.180 回答
4

此命令将为您获取 Git 父提交哈希:

git log -n 2 <commit-hash>

之后git diff-tool <commit-hash> <parent-commit-hash>

例子:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3

commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 13:17:07 2016 +0530

CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.

commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 11:28:09 2016 +0530

The ratio of the height to width of the channel images are maintained.

在这之后

git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f
于 2016-07-29T12:19:29.580 回答
4

我在 Windows 10 上运行 Git 版本 2.6.1.windows.1,所以我需要对 Nevik 的答案稍作修改(波浪号而不是插入符号):

git diff COMMIT~ COMMIT

另一种选择是引用插入符号:

git diff "COMMIT^" COMMIT
于 2017-01-20T08:00:41.770 回答
3

还可以查看特定文件的两次提交之间的更改。

git diff <commit_Id_1> <commit_Id_2> some_dir/file.txt
于 2020-12-22T19:45:37.147 回答
1

如果在图形视图中检查源更改,请使用:

gitk (your commit id goes here)

例如:

gitk HEAD~1 
于 2018-05-11T08:02:59.527 回答
0

一些答案错过了一个特殊情况。如何查看根提交所做的更改,因为它没有父/祖先。

两个都

git diff <root_commit>^..<root_commit>

git diff <root_commit>~..<root_commit>

抛出错误。

$git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea~ 27e521ca73a46b2d3a28568dc49fced81e46aaea
fatal: ambiguous argument '27e521ca73a46b2d3a28568dc49fced81e46aaea~': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

git diff <root_commit>^!

显示 diff btw root commit和 HEAD。像这样:

$ git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea^!
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..80f3f1a
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1,5 @@
+Create the first file.
+
+Add some placeholder text to first file.
+
+
diff --git a/file2.txt b/file2.txt
new file mode 100644
index 0000000..66e494f
--- /dev/null
+++ b/file2.txt
@@ -0,0 +1,6 @@
+This is the second file.
+
+It has an uncommited commit.
+
+We use it to demo default `git diff` behaviour.
+

(这些是我的根提交和 HEAD的所有提交所做的更改)。

对于根提交

我发现只有

git show --color --pretty=format:%b <root_commit_hash>

作品。

像这样:

$ git show --color --pretty=format:%b 27e521ca73a46b2d3a28568dc49fced81e46aaea

diff --git a/README b/README
new file mode 100644
index 0000000..12a04f0
--- /dev/null
+++ b/README
@@ -0,0 +1,6 @@
+# git-diff-demo
+
+This repo documents the demo of the git diff command.
+We will have options, and use cases.

(我的根提交只添加了自述文件)

于 2022-02-17T07:12:33.950 回答