【发布时间】:2013-07-07 23:23:30
【问题描述】:
当我执行git diff COMMIT 时,我看到了该提交和 HEAD 之间的更改(据我所知),但我想查看该单个提交所做的更改。
我在 diff / log 上没有找到任何明显的选项可以给我这样的输出。
【问题讨论】:
标签: git version-control diff git-diff
当我执行git diff COMMIT 时,我看到了该提交和 HEAD 之间的更改(据我所知),但我想查看该单个提交所做的更改。
我在 diff / log 上没有找到任何明显的选项可以给我这样的输出。
【问题讨论】:
标签: git version-control diff git-diff
查看特定COMMIT 哈希的差异,其中COMMIT 是提交的哈希:
git diff COMMIT~ COMMIT 将显示COMMIT 的祖先和COMMIT 之间的区别。有关命令的详细信息,请参阅 git diff 的手册页,以及有关 ~ 符号及其朋友的 gitrevisions 的手册页。
或者,git show COMMIT 会做一些非常相似的事情。 (提交的数据,包括其差异 - 但不用于合并提交。)请参阅git show manpage。
(git diff COMMIT 也会告诉你COMMIT 和头部之间的区别。)
【讨论】:
^ 需要在 Thomson 和 Bourne shell(那里是 | 的同义词)和 rc 及其派生词(插入符号运算符)和 zsh 中引用,并带有扩展的 glob已启用(not globbing 运算符)
HEAD^ 表示第一个父级,以防一个提交有多个父级(即合并提交)。
git diff COMMIT~ COMMIT 为我工作,注意波浪号而不是插入符号。我在 Windows 10 上运行 git 版本 2.6.1.windows.1。
如“Shorthand for diff of git commit with its parent?”中所述,您还可以将git diff 与:
git diff COMMIT^!
或
git diff-tree -p COMMIT
使用 git show,你需要(为了只关注差异)做:
git show --color --pretty=format:%b COMMIT
COMMIT 参数是 commit-ish:
commit object 或 object 可以递归地取消引用到提交对象。以下都是commit-ish:一个commit对象、一个指向commit对象的tag object、一个指向一个指向commit对象的tag对象的tag对象等等。
请参阅 gitrevision "SPECIFYING REVISIONS" 以引用 commit-ish。
另见“What does tree-ish mean in Git?”。
【讨论】:
你也可以试试这个简单的方法:
git show <COMMIT>
【讨论】:
git show 显示在最近一次提交中所做的更改。相当于git show HEAD。
git show HEAD~1 带您返回一个提交。
【讨论】:
我通常这样做:
git diff HEAD~1
显示有关上次提交的更改。如果您有更多提交,只需将数字 1 增加到您想要查看的提交 diff 数。
【讨论】:
git show ;)
用途:
git show <commit_sha>
这将向您展示该提交中的内容。您可以通过在两个提交 SHA-1 哈希之间放置一个空格来确定范围。
git show <beginning_sha> <ending_sha>
如果您经常变基,这将非常有用,因为您的功能日志将全部排成一行。
如果您碰巧想查看最后 3 次提交,可以使用 HEAD 语法
git show HEAD~3 HEAD
【讨论】:
HEAD~3?
git show HEAD~3 HEAD 这样的东西,它比其他 git 命令有点笨拙,但它可以工作。
首先使用获取提交 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_id
For example: git show 1c6a600a
【讨论】:
^! 是什么意思??
来自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>
比较上次提交和上次提交前的版本。
诚然,它的措辞有点令人困惑,但它会不那么令人困惑
将最近的提交与之前的提交进行比较。
【讨论】:
git diff HEAD HEAD^。
以下似乎可以完成这项工作;我用它来显示合并带来了什么。
git whatchanged -m -n 1 -p <SHA-1 hash of merge commit>
【讨论】:
git log也有效吗? (因为stackoverflow.com/a/18585297/6309)
另一种可能性:
git log -p COMMIT -1
【讨论】:
我喜欢下面的命令来比较一个特定的提交和它的最后一个提交:
git diff <commit-hash>^-
例子:
git diff cd1b3f485^-
【讨论】:
对我来说这很好用
git show COMMIT --compact-summary
显示下一条信息
输出扩展头信息的简明摘要,例如文件创建或删除(“new”或“gone”,如果是符号链接,则可选“+l”)和模式更改(“+x”或“-x”在 diffstat 中分别添加或删除可执行位)。信息放在文件名部分和图形部分之间。隐含--stat。
【讨论】:
您可以使用git diff HEAD HEAD^1 查看与父提交的差异。
如果您只想查看文件列表,请添加--stat 选项。
【讨论】:
diff 命令的方式是:我需要在文件中进行哪些更改才能从提交HEAD 到提交HEAD^1?
如果您只想查看最新提交中的更改,只需 git show 即可。
【讨论】:
git difftool COMMIT^ <commit hash>
如果你已经配置了你的 difftool 也是可能的。
在此处查看如何configure difftool。或手册页here。
此外,您可以使用git diff-tree --no-commit-id --name-only -r <commit hash> 查看在给定的提交哈希中更改/提交了哪些文件。
【讨论】:
要按提交查看作者和时间,请使用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'
如果您想查看哪些文件已更改,请使用上面 Merge 行中的值运行以下命令,git diff --stat a2a2894 3a1ba8f。
如果您想查看实际差异,请运行 git --stat a2a2894 3a1ba8f。
【讨论】:
git --stat a2a2894 3a1ba8f"。我想你的意思是git diff a2a2894 3a1ba8f 或者unknown option: --stat。
git show COMMIT 已经显示了正常提交的变更集。它只会在合并时不显示。
以下代码将显示当前提交
git show HEAD
【讨论】:
检查完整的更改:
git diff <commit_Id_1> <commit_Id_2>
仅检查更改/添加/删除的文件:
git diff <commit_Id_1> <commit_Id_2> --name-only
注意:为了检查 diff 而没有在两者之间提交,您不需要输入提交 ID。
【讨论】:
此命令将为您获取 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
【讨论】:
我在 Windows 10 上运行 Git 版本 2.6.1.windows.1,所以我需要对 Nevik 的回答稍作修改(波浪号而不是插入符号):
git diff COMMIT~ COMMIT
另一种选择是引用插入符号:
git diff "COMMIT^" COMMIT
【讨论】:
还可以查看特定文件的两次提交之间的更改。
git diff <commit_Id_1> <commit_Id_2> some_dir/file.txt
【讨论】:
git diff <commit_Id> on/specific/file.txt
【讨论】:
gitk 不是git,它是一个特殊的包,它并不存在于可以安装git 的每个操作系统上。tig 和其他许多工具一样也是很好的工具。
一些答案错过了一个特殊情况。 如何查看 Root Commit 所做的更改,因为它没有父/祖先。
两者
git diff <root_commit>^..<root_commit>
和
git diff <root_commit>~..<root_commit>
抛出一个错误。
$git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea~ 27e521ca73a46b2d3a28568dc49fced81e46aaea
fatal: 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>^!
显示差异 btw root commit 和 HEAD。像这样:
$ git diff 27e521ca73a46b2d3a28568dc49fced81e46aaea^!
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 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.txt
new file mode 100644
index 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.
+
(这些是我的 root 提交 和 HEAD 的所有提交所做的更改)。
对于根提交
我只找到了
git show --color --pretty=format:%b <root_commit_hash>
有效。
像这样:
$ git show --color --pretty=format:%b 27e521ca73a46b2d3a28568dc49fced81e46aaea
diff --git a/README b/README
new file mode 100644
index 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 commit只添加了README)
【讨论】: