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


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

我没有在diff / log上找到任何明显的选项,它会给我输出。


996
2017-07-10 06:22


起源


可能重复 git提交与其父级的差异的简写? - Chris Maes


答案:


查看特定的差异 COMMIT 哈希:

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

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


1284
2017-07-10 06:23



请注意 ^ 需要引用汤姆森和伯恩贝壳(同义词) | 那里)和 rc 及其衍生物(插入符号操作符)和in zsh 启用extendedglob(not globbing运算符) - Stephane Chazelas
这不再起作用了。 git diff HEAD ^ HEAD没有显示任何内容。 - user3690202
git diff COMMIT~ COMMIT 适合我,注意代字号而不是插入符号。我在Windows 10上运行git版本2.6.1.windows.1。 - Juuso Ohtonen
@tradetree:应该用一些提交的名称替换COMMIT这个词,例如SHA总和。 - Kundor
我觉得git show更适合这个问题,应该是首先提到的建议。 - pypmannetjies


正如“git提交与其父级的差异的简写?“,你也可以使用 git diff 有:

git diff COMMIT^!

要么

git diff-tree -p COMMIT

使用git show,你需要(为了专注于diff)来做:

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

COMMIT 参数是一个 提交十岁上下

一个 提交对象 或者 目的 可以递归地取消引用提交对象。以下是commit-ishes:一个提交对象,一个 标签对象 指向提交对象,指向指向提交对象的标记对象的标记对象,等等。

看到 gitrevision“指定修订” 引用commit-ish。
也可以看看 ”树在Git中意味着什么?”。


373
2017-07-10 06:31





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

git show <COMMIT>

185
2018-06-15 09:02



看起来这有点完全不同 - Miserable Variable
这是正确的答案。 - KeithTheBiped
唉,这并没有显示合并提交的差异。 - manmal


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

相当于 git show HEAD

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


48
2017-09-16 01:50





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

21
2017-07-19 05:48



什么是 ^! 意思?? - Martín Coll
^!是提交^ ...提交的简写,这意味着将排除所有父项并检查该提交中的差异 - Mohideen ibn Mohammed
我不是专家,但我有一个案例(涉及多个分支)git log c ^!与git log c ^ .. c不完全相同。事实上它更好:git log c ^ .. c列出了太多条目而git log c ^!做对了,所以这就是我长期寻找的东西 - user829755


从手册页 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>

使用中间的第3个:

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

也是从同一个手册页,在底部,在 示例部分

$ git diff HEAD^ HEAD      <3>

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

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

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


20
2017-07-10 07:20



你的重写将适用于 git diff HEAD HEAD^。 - Richard
git diff HEAD ^ HEAD不显示任何更改。 - user3690202
@ user3690202这意味着没有任何变化要显示。实际情况是这样的吗?
怎么没有显示任何变化?如果你想查看最后一次提交,当然除非它是一个全新的存储库,否则会有一些变化要显示? - user3690202
@ user3690202可以使用Git进行“空提交”,但实际上并不包含来自父级的任何更改,尽管有一个内置的安全措施可以检查并阻止它,尽管它可以通过命令行选项覆盖。我怀疑你是否会故意创建一个空提交,所以另一种可能性就是你以某种方式预先提交了行结束转换(或其他有趣的空白内容),这会让Git认为实际上没有做出任何修改。你在Git上运行什么平台?


以下似乎做了这个工作;我用它来显示合并带来的内容。

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

17
2017-10-14 17:16



那会有用吗? git log? (因为 stackoverflow.com/a/18585297/6309) - VonC


另一种可能性

git log -p COMMIT -1


9
2018-02-16 14:49



也 git show COMMIT 给出相同的输出 - Grant McLean
@GrantMcLean是的,它已经是最高评价的答案,所以我没有提到它。 - John_West