117

有时当我即将提交时,我记不起自上次提交以来发生了什么变化。如何查看代码当前状态和上次提交的差异?

4

6 回答 6

144

如果您尚未将任何文件添加到索引中(使用git add),只需执行

git diff

这将显示您的工作树和索引之间的差异。

如果您已将文件添加到索引中,则需要执行此操作以显示索引和上次提交 (HEAD) 之间的差异。

git diff --cached

最后,如果您想查看与最新提交 ( HEAD) 相比在工作树中所做的更改,您可以(正如 Carlos 指出的那样)

git diff HEAD

这些变化是 和 的git diff组合git diff --cached

于 2013-06-21T21:21:47.073 回答
42

如果您刚刚进行了提交,或者想查看与当前状态相比上次提交中发生了什么变化(假设您有一个干净的工作树),您可以使用:

git diff HEAD^

这会将 HEAD 与之前的提交进行比较。也可以做

git diff HEAD^^

与 2 次提交前的游戏状态进行比较。要查看当前状态和某个提交之间的差异,只需执行以下操作:

git diff b6af6qc

b6af6qc提交哈希的示例在哪里。

于 2016-11-30T18:11:35.787 回答
4

这也显示了差异以及哪些文件已更改/修改。

$ git status 

显示索引文件和当前 HEAD 提交之间存在差异的路径,工作树和索引文件之间存在差异的路径,以及工作树中未被 git 跟踪(并且未被 gitignore(5) 忽略的路径) )。第一个是您将通过运行 git commit 提交的内容;第二个和第三个是在运行 git commit 之前运行 git add 可以提交的内容。

https://www.kernel.org/pub/software/scm/git/docs/git-status.html

于 2013-06-22T05:12:39.860 回答
3

您要求 git 区分当前/最后一次提交,它的简写为HEAD.

所以git diff HEAD会将工作树的当前状态与当前提交进行比较。

于 2013-06-21T21:22:30.917 回答
3

你试过git show吗?

描述:显示一个或多个对象(blob、树、标签和提交)。

对于提交,它显示日志消息和文本差异。它还以 git diff-tree --cc 生成的特殊格式呈现合并提交。

取自 git help

您不需要编写 HEAD 或上次提交的 SHA-1,只需键入git show.

我认为这将有助于您的需求以及其他答案,但根据具体情况减少打字和更多信息。

在这里,我添加了一个git show实际显示的示例:

>> git show

commit 49832d33b5329fff95ba0a86002ee8d5a762f3ae (HEAD -> my_new_branch, master)
Author: Abimael Domínguez <my_mail@mail.com>
Date:   Thu Jan 7 13:05:38 2021 -0600

    This is the commit message of the last commit

diff --git a/some_folder/some_file.txt b/some_folder/some_file.txt
index 59fb665..5c36cde 100644
--- a/some_folder/some_file.txt
+++ b/some_folder/some_file.txt
@@ -3,6 +3,6 @@
 This is the content of the last updated file
 some text
 some text
-text deleted
+text added
 some text
 some text

于 2021-01-07T20:30:56.827 回答
2

这也适用于我:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

这通常适用于线性历史。如果还有合并提交,这可能会变得更加棘手。我建议您查看此文档以获得一个很好且完整的解释,尤其是提交树插图示例:

https://git-scm.com/docs/gitrevisions

于 2020-06-24T15:17:11.980 回答