如何查看Git提交中的更改?

时间:2013-07-10 06:22:43

标签: git version-control diff git-diff

当我git diff COMMIT时,我看到了提交和HEAD之间的变化(据我所知),但我希望看到这次提交所做的更改。

我在diff / log上找不到任何可以提供输出的明显选项。

22 个答案:

答案 0 :(得分:1560)

要查看特定COMMIT哈希的差异:

git diff COMMIT~ COMMIT会显示COMMIT的祖先与COMMIT之间的区别。有关该命令的详细信息,请参阅git diff的手册页;有关~符号及其朋友的gitrevisions

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

答案 1 :(得分:430)

如“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 objectobject。以下是commit-ishes:提交对象,指向提交对象的tag object,指向指向提交对象的标记对象的标记对象,等等。

请参阅gitrevision "SPECIFYING REVISIONS"以引用commit-ish 另请参阅“What does tree-ish mean in Git?”。

答案 2 :(得分:267)

您也可以尝试这种简单方法:

git show <COMMIT>

答案 3 :(得分:58)

git show显示最近提交中所做的更改。

相当于git show HEAD

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

答案 4 :(得分:27)

首先使用

获取提交ID
git log #to list all

或者

git log -p -1 #last one commit id

复制提交ID。

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

方法1:

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

方法2:

git show commit_id
For example: git show 1c6a600a

答案 5 :(得分:25)

git show <commit_sha>

这将向您显示该提交中的内容。我认为您可以通过在两个提交阴影之间放置一个空格来进行调整。

git show <beginning_sha> <ending_sha>

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

答案 6 :(得分:24)

来自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>

同样来自同一手册页,位于Examples section

的底部
$ git diff HEAD^ HEAD      <3>
  

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

不可否认,它的措辞有些令人困惑,因为它不会那么令人困惑。

  

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

答案 7 :(得分:20)

以下似乎可以胜任这项工作;我用它来显示合并带来了什么。

git whatchanged -m -n 1 -p <SHA-1 hash of merge commit>

答案 8 :(得分:11)

另一种可能性:

git log -p COMMIT -1

答案 9 :(得分:9)

git difftool COMMIT^ <commit hash>
如果您配置了difftool,也可以

请点击此处configure difftool 或手册页here

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

答案 10 :(得分:7)

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

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

答案 11 :(得分:6)

通过提交使用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'

如果您想查看哪些文件已被更改,请使用git diff --stat a2a2894 3a1ba8f上方合并行中的值运行以下内容。

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

答案 12 :(得分:5)

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

答案 13 :(得分:5)

我喜欢以下命令来比较特定提交及其最后一次提交:

git diff <commit-hash>^-

示例:

git diff cd1b3f485^-

答案 14 :(得分:4)

我在Windows 10上运行Git版本2.6.1.windows.1,所以我需要稍微修改一下Nevik的答案(代替插入符号):

git diff COMMIT~ COMMIT

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

git diff "COMMIT^" COMMIT

答案 15 :(得分:3)

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

git diff <commit_Id_1> <commit_Id_2> some_dir/file.txt

答案 16 :(得分:2)

用于检查完整的更改:

  git diff <commit_Id_1> <commit_Id_2>

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

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

注意:要检查diff,而无需在之间进行提交,则无需放置提交ID。

答案 17 :(得分:2)

我通常这样做:

git diff HEAD~1

显示有关最后一次提交的更改。如果您有更多提交,只需将数字1增加到要查看的提交差异数即可。

答案 18 :(得分:2)

此命令将为您提供Git父commit-hash:

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

答案 19 :(得分:1)

以下代码将显示当前提交

git show HEAD

答案 20 :(得分:1)

对我来说这很好用

git show COMMIT --compact-summary

显示下一个信息

<块引用>

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

答案 21 :(得分:-1)

如果在图形视图中检查源更改,

$gitk (Mention your commit id here)

例如:

$gitk HEAD~1