git diff HEAD和git diff输出“错误”

时间:2016-05-13 03:54:13

标签: git github version-control

我运行了以下命令,并对git diff HEAH以及git diff

的输出感到困惑
Athrun@Athrun-PC MINGW64 ~/Desktop/path/to/my/workspace/demo
$ git init

Initialized empty Git repository in C:/Users/Athrun/Desktop/path/to/my/workspace                                          /demo/.git/

Athrun@Athrun-PC MINGW64 ~/Desktop/path/to/my/workspace/demo (master)
$ echo "Hello World" > welcome.txt

Athrun@Athrun-PC MINGW64 ~/Desktop/path/to/my/workspace/demo (master)
$ git add welcome.txt

Athrun@Athrun-PC MINGW64 ~/Desktop/path/to/my/workspace/demo (master)
$ git commit -m "\"Hello World\" committed"

[master (root-commit) eb00b00] "Hello World" committed
 1 file changed, 1 insertion(+)
 create mode 100644 welcome.txt

Athrun@Athrun-PC MINGW64 ~/Desktop/path/to/my/workspace/demo (master)
$ git rm --cached welcome.txt

rm 'welcome.txt'

Athrun@Athrun-PC MINGW64 ~/Desktop/path/to/my/workspace/demo (master)
$ git diff HEAD

diff --git a/welcome.txt b/welcome.txt
deleted file mode 100644
index 557db03..0000000
--- a/welcome.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello World

Athrun@Athrun-PC MINGW64 ~/Desktop/path/to/my/workspace/demo (master)
$ git diff

基本上,我初始化了一个repo,用字符串“Hello World”创建了一个文件并提交了该文件。然后我运行了命令git rm --cached welcome.txt来删除暂存区域中的“文件”(不知道我是否可以将其称为“文件”)。然后我运行了两个命令git diff HEADgit diff来比较HEAD和暂存区域的变化。

我在这里理解的是工作目录和HEAD具有相同版本的文件,`git diff HEAD'应该显示什么,而'git diff'应该显示“Hello World”已删除。

然而,输出正好相反。

2 个答案:

答案 0 :(得分:1)

当工作目录参与比较时,只考虑跟踪的文件。

  1. git diff HEADHEAD有一个文件welcome.txt,工作目录为空(未跟踪任何文件),因此diff已移除welcome.txt
  2. git diff:index为空,工作目录为空(未跟踪文件),因此diff为空。

答案 1 :(得分:0)

根据我对GIT的理解,下面是您查询的解释。

您已使用" Hello world"提交了welcome.txt文件。因此,在提交($ git commit -m" \" Hello World \"已提交")之后,您将获得提交ID(例如C1)。现在你的HEAD将指向C1。

之后,您通过(git rm --cached welcome.txt)更改文件,以便更改工作树。由于未提交更改,因此您的更改将存在于工作树中。

1 - git diff HEAD - 它应该显示HEAD(C1)和工作树之间的区别,即" Hello World"。

所以提交更改帖子" git rm"你不应该有任何差异。

2 - git diff - 显示暂存区和工作树之间的区别。

但我认为这不应该是空的。所以即使是我也不清楚。

如果我错了或不理解你的问题,请纠正我。