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


Answers:


1969

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

git diff COMMIT~ COMMIT会告诉你那COMMIT祖先和祖先之间的区别COMMIT。请参阅git diff的手册页,以获取有关命令的详细信息以及有关符号及其朋友的gitrevisions~

或者,git show COMMIT做一些非常相似的事情。(提交的数据,包括其diff-但不包括合并提交。)请参见git show manpage


17
请注意,^需要在Thomson和Bourne shell(|那里的同义词)rc及其衍生物(插入符号运算符)中zsh启用报价,并在启用not
extendedglob的情况下引用

3
请注意,HEAD^如果一个提交有多个父级(即合并提交),则意味着第一个父级。
曼苏尔2015年

23
git diff COMMIT~ COMMIT为我工作,注意波浪号而不是插入符号。我在Windows 10上运行的Git版本2.6.1.windows.1
了Juuso Ohtonen

14
@tradetree:应将COMMIT字样替换为某些提交的名称,例如SHA sum。
尼克·马特奥

91
我觉得git show更适合这个问题,应该是首先提到的建议。
pypmannetjies

496

如“与父代进行git commit的区别的简写? ”中所述,您还可以使用git diff

git diff COMMIT^!

要么

git diff-tree -p COMMIT

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

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

COMMIT参数是 commit-ish

commit对象或一个对象可以被递归地解除引用到一个提交对象。以下是所有提交-ishes:提交对象,标签对象是指向一个commit对象,标签对象指向一个标签对象指向一个commit对象,等等。

请参阅gitrevision“指定版本”以引用提交。
另请参见“ 树状结构在Git中是什么意思? ”。


369

您也可以尝试以下简单方法:

git show <COMMIT>

2
看来这确实有很大不同
悲惨的变量

3
它仅显示提交消息。并非此提交所应用的代码更改的差异。
k0pernikus

1
是的,它确实?最后是最近的git版本...
戴维

2
这应该是更新后的正确答案
Scott Skiles

1
这应该是答案。
Roel

77

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

等同于git show HEAD

git show HEAD~1 带您退回1次提交。


45

我通常这样做:

git diff HEAD~1

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


34

首先使用来获取提交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

2
什么^!意思?
马丁·科尔

2
^!是commit ^ .. commit的简写,这意味着将排除所有父母并检查该提交中的差异
Mohideen bin Mohammed

我不是专家,但是我有一个案例(涉及多个分支),其中git log c ^!与git log c ^ .. c不完全相同。实际上,这要好得多:git log c ^ .. c列出了太多条目,而git log c ^!做了正确的事情,所以这就是我很久以来一直在寻找的东西
user829755'4

32
git show <commit_sha>

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

git show <beginning_sha> <ending_sha>

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


25

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>

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

诚然,它的措词有些混乱,它不会像

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


3
您的改写将适用于git diff HEAD HEAD^
理查德

git diff HEAD ^ HEAD不显示任何更改。
user3690202 2015年

@ user3690202,这意味着没有任何更改要显示。真的是这样吗?

怎么不显示任何更改?如果您要查看最后的提交,那么除非它是一个全新的存储库,否则肯定会显示一些更改吗?
user3690202 2015年

@ user3690202可以使用Git进行“空提交”,但实际上没有包含来自父项的任何更改,尽管有内置的防护措​​施可以检查并防止这种情况发生,尽管它可以通过命令行选项覆盖。我怀疑您会故意创建一个空的提交,因此另一种可能性是您以某种方式对(或其他有趣的空白内容)进行了预提交行尾转换,这使Git误以为实际上没有进行任何更改。您在哪个平台上运行Git?



11

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

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


这就是你的意思,git diff HEAD ^ 1 HEAD
Shibir Basak

请注意,这将显示您添加时删除的内容,因为它将进行反向比较。您应该阅读diff命令的方式是:从提交HEAD到提交,我需要在文件中进行哪些更改HEAD^1
brainplot

9
git difftool COMMIT^ <commit hash>

如果已经配置了difftool,则也可以。

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

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


9

我喜欢下面的命令来比较特定的提交及其最后的提交:

git diff <commit-hash>^-

例:

git diff cd1b3f485^-

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


“如果要查看实际差异,请运行git --stat a2a2894 3a1ba8f”。我想你的意思git diff a2a2894 3a1ba8f,否则unknown option: --stat
水果

5

要检查完整的更改:

  git diff <commit_Id_1> <commit_Id_2>

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

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

注意:要检查diff而没有提交,则不需要放置提交ID。


4

我正在Windows 10上运行Git版本2.6.1.windows.1,因此我需要对Nevik的答案进行一点修改(以波浪号代替插入符号):

git diff COMMIT~ COMMIT

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

git diff "COMMIT^" COMMIT

3

该命令将为您提供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

2

如果您只想查看最新提交中的更改,只需执行git show一下即可。


1

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

$gitk (Mention your commit id here)

例如:

$gitk HEAD~1 

我不明白为什么这个答案被否决了。我同意可以使用命令行和基于文本的内容,但是gitk提供了许多有用的信息。
ShellFish
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.