查看当前状态和上次提交之间的差异

有时候,当我准备提交一个提交时,我不能准确地回忆起自上次提交以来发生了什么变化。我怎样才能看到代码的当前状态和最后一次提交的差异?

105246 次浏览

If you haven't added any files to the index yet (with git add), simply do

git diff

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

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

git diff --cached

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

git diff HEAD

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

要求 git 区分当前/最后一次提交,该提交有 HEAD的简写。

因此,git diff HEAD将比较工作树的当前状态和当前提交。

这也显示了区别,以及哪些文件被修改/修改了。

$ git status

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

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

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

git diff HEAD^

这将比较 HEAD 和之前的提交。也可以这样做

git diff HEAD^^

to compare to the state of play 2 commits ago. To see the diff between the current state and a certain commit, just simply do:

git diff b6af6qc

其中 b6af6qc是提交散列的示例。

这对我也有用:

# 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

你试过 git show吗?

DESCRIPTION: 显示一个或多个对象(blobs、树、标记和提交)。

对于提交,它显示日志消息和文本差异 以 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