2011-01-19 255 views
31

如果我跑在我的回購「git的狀態」它給:git:爲什麼git diff不顯示任何差異?

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# modified: myfile 

但是,如果我做一個「git的差異MYFILE」,也沒有任何的差異。這是因爲我做了一個改變,並將其刪除,以便它回到原始狀態?

我應該運行'git checkout myfile'來清除它嗎?

回答

49

您的文件已被暫存以提交。你可以使用git的--cached選項來顯示它的差異。

git diff --cached myfile 

要unstage它,只是做git的狀態顯示在它的輸出;)

您可以檢查The Git Index欲瞭解更多信息。

+1

這對我有用,但只有在我首先運行「git add」之後。謝謝。 – 2015-02-10 14:56:27

5

我對--staged別名有偏好,主要是因爲我發現--staged實際上意味着我想要做什麼,即向我展示分階段的差異。

git diff --staged 

接受的答案是正確的,我對此毫無疑問。只是個人認爲--cached感覺就像git diff緩存答案並向我顯示預先計算的結果或其他內容。

我也喜歡git diff HEAD因爲它是一個更一般的。這兩個概念,大多數人知道放在一起,那就是:

  1. git diff <commit>讓您看到您的當前位置和先前提交的區別。

  2. HEAD(或head,因爲持有班次很煩人)是對您的分支的提示。 (對於那些你誰是計數按鍵,@HEAD的別名。)

相結合,這兩種通常有用的概念導致:

git diff head 
git diff @ 
0

對於臨時區域VS庫比較使用

$git diff --staged 

對於工作VS庫比較使用

$ git diff 

但是,如果文件被更改並添加到暫存區域($ git add fileName),並且我們嘗試查看與($ git diff)的區別。它不會返回任何區別,因爲文件處於暫存區域,並且不會與存儲庫進行比較。

相關問題