为啥 git diff 显示错误的提交?

Posted

技术标签:

【中文标题】为啥 git diff 显示错误的提交?【英文标题】:Why is git diff showing wrong commit?为什么 git diff 显示错误的提交? 【发布时间】:2018-11-28 08:36:24 【问题描述】:

我试图通过下面显示的消息 Add structure 获取提交的差异,但 git diff fb237ff 显示提交 "Add title" 的差异。我怎样才能得到我想要的SHA 的差异而不是这个提交的孩子?:

commit 31013a1 (HEAD -> master, origin/master)
Author: user.name <user.email>
Date:   Sun Jun 17 19:28:52 2018 +0100

    Add title

commit fb237ff
Author: user.name <user.email>
Date:   Sun Jun 17 19:24:33 2018 +0100

    Add structure

commit 69d64b4
Author: user.name <user.email>
Date:   Sun Jun 17 19:10:26 2018 +0100

    Add heading

【问题讨论】:

How to see the changes in a git commit?的可能重复 【参考方案1】:

git diff SHA 显示了从命名提交到当前 HEAD 的差异——这将是自提交以来发生的所有变化——即最新的提交。

您可能希望git show SHA 向您显示该提交中包含的更改,或者git log -p 显示提交消息和更改。

【讨论】:

【参考方案2】:

git diff 接受一两个修订版进行比较。当只提供一个时,它会将工作树与它进行比较。

如果您发布了git log -n 3 的输出,那么HEAD 就是31013a1,以下 Git 命令是等效的:

git diff fb237ff
git diff HEAD~1

如果您想显示提交 fb237ff 引入的更改,则必须将其与其父级 (69d64b4) 进行比较。为此,您可以使用以下任何命令:

git diff 69d64b4 fb237ff
git diff fb237ff~1 fb237ff
git diff HEAD~2 HEAD~1

阅读documentation of git diff 以及如何指定Git revisions。

【讨论】:

实际上,与其他两个答案一样,git diff &lt;tree-ish&gt;&lt;tree-ish&gt; 与工作树进行比较。 (我必须一直查阅git diff 文档,因为它的规则在某些情况下与违反直觉的内容进行比较...)【参考方案3】:

git diff &lt;commit&gt; 显示您的工作目录和 之间的区别。因此,在您的情况下,这确实是 31013a1 的内容(加上您可能拥有的任何其他未提交的更改)。

为了查看一次提交引入的更改,您可以执行以下操作:

git show <commit>

【讨论】:

以上是关于为啥 git diff 显示错误的提交?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Git Diff/Patch 信息与该补丁的 Github 表示不同?

[SourceTree] - 提交代码失败 "git -c diff.mnemonicprefix=false -c core.quotepath=false" 之解决

使用SourceTree报git -c diff.mnemonicprefix=false -c core.quotepath=false revert --no-edit错误

使用SourceTree报git -c diff.mnemonicprefix=false -c core.quotepath=false revert --no-edit错误

为啥 array_diff() 给出数组到字符串的转换错误?

gitlog和diff区别