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

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

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

1610515 次浏览

要查看特定COMMIT哈希的差异,其中COMMIT是提交的哈希:

git diff COMMIT~ COMMIT将向您展示COMMIT的祖先和COMMIT之间的区别。有关命令的详细信息,请参阅gitdiff的手册页,有关~符号及其朋友的详细信息,请参阅修改版本

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

git diff COMMIT也会告诉你COMMIT和头部之间的区别。

如“简写为diff的git提交与它的父?”中所述,您还可以将#0用于:

git diff COMMIT^!

git diff-tree -p COMMIT

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

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

COMMIT参数是提交

可以递归地取消对提交对象的引用的提交对象对象。以下是所有提交:提交对象、指向提交对象的标签对象、指向指向提交对象的标签对象的标签对象等。

请参阅Git修订版“具体修订”以引用一个提交。
请参阅“Tree-ish在Git中是什么意思?”。

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>

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

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

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

git difftool COMMIT^ <commit hash>

也可以,如果你已经配置了你的扩散工具。

在这里查看如何配置漫射工具。或手册页这里

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

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

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

要查看提交的作者和时间,请使用git show COMMIT。这将导致如下结果:

commit 13414df70354678b1b9304ebe4b6d204810f867eMerge: a2a2894 3a1ba8fAuthor: 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 diff HEAD HEAD^1来查看父提交的差异。

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

另一种可能:

git log -p COMMIT -1

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

git show <COMMIT>

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

git log -n 2 <commit-hash>

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

示例:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3
commit 7f65b9a9d3820525766fcba285b3c678e889fe3bAuthor: 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 c3a61f17e14e2b80cf64b172a45f1b4826ee291fAuthor: 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

git show显示了最近提交中所做的更改。它等效于git show HEAD

git show HEAD~1返回一个提交。

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

git diff COMMIT~ COMMIT

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

git diff "COMMIT^" COMMIT

首先获取提交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_idFor example: git show 1c6a600a

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

git diff <commit-hash>^-

示例:

git diff cd1b3f485^-

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

gitk (your commit id goes here)

例如:

gitk HEAD~1

用途:

git show <commit_sha>

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

git show <beginning_sha> <ending_sha>

如果您经常重设基准,这将非常有用,因为您的功能日志将全部排在一行中。

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

git show HEAD~3 HEAD

检查完整更改:

  git diff <commit_Id_1> <commit_Id_2>

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

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

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

我通常做:

git diff HEAD~1

显示有关上次提交的更改。如果您有更多的提交,只需将数字1增加到您希望看到的提交差异。

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

以下代码将显示当前提交

git show HEAD

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

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

对我来说,这很好

git show COMMIT --compact-summary

显示下一个信息

输出扩展标头信息的压缩摘要,例如文件创建或删除(“新”或“消失”,如果是符号链接,可以选择“+l”)和模式更改(分别用于添加或删除可执行位的“+x”或“-x”)。该信息放在文件名部分和图形部分之间。暗示--stat。

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

两者都有

git diff <root_commit>^..<root_commit>

git diff <root_commit>~..<root_commit>

抛出错误。

$git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea~ 27e521ca73a46b2d3a28568dc49fced81e46aaeafatal: 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 btwroot提交和HEAD。像这样:

$ git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea^!diff --git a/file1.txt b/file1.txtnew file mode 100644index 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.txtnew file mode 100644index 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.+

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

对于根提交

我发现只有

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

作品。

像这样:

$ git show --color --pretty=format:%b 27e521ca73a46b2d3a28568dc49fced81e46aaea
diff --git a/README b/READMEnew file mode 100644index 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.

(我的root提交只添加了README)

"HASH_in_history"--"path_to_file"

  1. 可以点击git具体地址上的每个提交查看
  2. 如果你提交一个工具,你可以通过显示历史

检查文件更改的更简约的方法(示例)

# 1. Checkout a branch and see the list of commitsgit log --oneline -5
# > Output9b9b1f8 (HEAD -> master) Updated ABCd58e5da chore: Added files5a4aa2c chore: Added my pipelinebb2b0b7 feat: Added ABC473f711 feat: Added ZYX
# 2. Pick a commit hash and check which files were modifiedgit show --stat --oneline d58e5da
# > Outputd58e5da chore: Added versioning filesSomeabcfile                            | 18 ++++++++++++++++++myfolder/file.py                       | 19 +++++++++++++++++++myfolder/file.js                       |  7 +++++++myfolder/file.txt                      |  1 +4 files changed, 45 insertions(+)
# 3. Pick a file to check the differencesgit show d58e5da myfolder12/file.py

或者,或者,检查列表中单个提交中的所有文件差异:

git show d58e5da