2016-05-13 110 views
0

我跑了下面的命令,並獲得困惑由git diff HEAH輸出以及git diff「錯誤的」通過git的差異HEAD和git的差異輸出

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo 
$ git init 

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

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ echo "Hello World" > welcome.txt 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git add welcome.txt 

[email protected] 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 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git rm --cached welcome.txt 

rm 'welcome.txt' 

[email protected] 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 

[email protected] MINGW64 ~/Desktop/path/to/my/workspace/demo (master) 
$ git diff 

基本上,我初始化的回購,創建與串的文件「Hello World」並提交了該文件。然後,我運行命令git rm --cached welcome.txt刪除「文件」(不確定我是否可以在此處稱爲「文件」)在暫存區域中。然後我運行了兩個命令git diff HEADgit diff來比較HEAD和臨時區域的變化。

我在這裏理解的是,工作目錄和HEAD具有相同版本的文件,`git diff HEAD'應該不顯示任何內容,而'git diff'應該顯示「Hello World」已刪除。

但是,輸出正好相反。

回答

1

當工作目錄參與比較時,只考慮跟蹤的文件。

  1. git diff HEADHEAD有一個文件welcome.txt,工作目錄是空的(沒有文件跟蹤),所以diffwelcome.txt刪除。
  2. git diff:索引爲空,工作目錄爲空(未跟蹤文件),所以diff爲空。
+0

@PetSerAI謝謝你的回答,我沒有意識到,git rm --cached不能解決這個文件。這有很大幫助。 – user1888955

0

爲了我對GIT的理解,下面是你的查詢的解釋。

您已將文件welcome.txt與「Hello world」一起提交。所以在提交後($ git commit -m「\」Hello World \「committed」),你會得到一個提交id(比如說C1)。現在你的HEAD將指向C1。

之後,您通過(git rm --cached welcome.txt)更改文件,以便更改您的工作樹。由於沒有提交更改,所以您的更改在您的工作樹中。

1 - git diff HEAD - 它應該顯示HEAD(C1)和工作樹之間的區別,即「Hello World」。

所以提交更改後「git rm」,你不應該有任何差異。

2 - git diff - 顯示暫存區域和工作樹的區別。

但我認爲這不應該是空的。所以即使我也不清楚。

糾正我,如果我錯了或沒有正確理解你的問題。

+0

謝謝您的回答。 git rm --cached untracks該文件實際上解決了導致我昨天遇到的問題的文件。 – user1888955