2011-05-18 18 views
34

我對Git來說很新,因此可能我在這裏丟失了一些東西。Git - 有些文件被標記爲已更改,但'git diff'不顯示任何內容

[email protected]:/var/www/$ git status -s 
M GoogleChromeExtension.js 
M ApiClient.js 

很清楚2個文件已被更改。
但是當我運行:顯示

git diff 

沒有輸出。我期待着在我的工作副本和最新的提交之間進行更改。

我肯定昨天一切工作的期待......

是它也許是因爲我沒有一直在推動更改到遠程服務器?

P.S:我使用的GitHub

感謝,

+2

請添加「git status」的輸出而不使用「-s」 – jcollie 2011-05-18 21:07:11

回答

49

做一個git diff --cached - 它比較HEAD和索引,即爲提交添加的東西。

只是一個git diff是索引和工作目錄之間,因此,如果所有的變化已經上演承諾,你不會看到git diff

什麼第三種形式是git diff <commit>,其比較的工作目錄,並提交。所以做git diff HEAD也會給你你想要的差異。

+4

另外,請注意,您可以從git-status的輸出中知道文件修改位於索引中,因爲'M'出現在第一個柱。如果變化沒有上演,那麼'M'會出現在第二列。 – 2011-05-18 22:29:16

+0

@William Pursell - 好點。另外,如果啓用彩色輸出,前者具有綠色M,後者爲紅色。至少,這是我在Windows上的git bash中的情況。因此,如果你知道在哪裏尋找,那麼只需要擁有'git status'並不是必須的,但'git status -s'也可以提供很多信息。 – manojlds 2011-05-18 22:31:41

+1

'git status -s'主要用於機器消耗;計算機通常比我們注意到M所在的列更好(而且我們更擅長閱讀顏色)。 – Cascabel 2011-05-18 22:50:18

3

取決於究竟是怎麼回事,可能有兩個解決辦法。如果你沒有使用短模式,最好的辦法是隱藏重要的調試信息。

如果您希望發生更改,請嘗試運行git diff HEAD以將工作目錄與上次提交進行比較。如果您已經對git add進行了更改,默認的git diff操作將不會顯示這些差異。請參閱http://git-scm.com/docs/git-diff手冊頁描述,其中討論了這一點。 git status輸出(沒有-s)將幫助每個人看到是否是這種情況。或者,如果您不希望發生更改,則可能是操作系統/文件系統問題。請報告您的操作系統和文件系統信息。

1

確保你實際上不在另一個git倉庫中。 如果因爲某些原因,上面的命令失敗,嘗試運行:

git show HEAD 
0

我最近剛有這個問題,並發現它發生,因爲我改變了我的.gitattributes文件存儲庫。你最近是否更改過任何.gitattributes文件?所有更改的文件都是相同類型的嗎?例如,我最近遇到的問題影響了* .sql文件。當我解開對.gitattributes的更改時,源文件再次變得不變。

相關問題