2009-12-04 49 views
3

Git的報告對我的分支之一以下狀態:Git的狀態有點混亂

# On branch awesome 
# Changes to be committed: 
# (use "git reset HEAD ..." to unstage) 
# 
#  new file: NEW.txt 
# 
# Changed but not updated: 
# (use "git add ..." to update what will be committed) 
# 
#  modified: NEW.txt 
#

這出現,因爲我創造了NEW.txt然後吩咐:

git add NEW.txt

,後來編輯的文件。這是否意味着做git commit將提交我對該文件所做的最新更改,還是應該格外小心?

回答

5

Git版本內容而不是文件。因此,您在git add時將提交下一次提交時的內容。

+0

大膽的陳述澄清了一切,謝謝。 – 2009-12-04 02:09:11

9

Git有一個工作目錄一個臨時區域(索引)的概念。如果您添加一個新文件,它將被添加到索引中。如果您稍後編輯該文件,則只會在您的工作副本中進行更改。您需要將它添加到索引中,就像您已經存在的文件一樣。

因此,簡而言之,只有索引中的內容纔會被提交。 commit -a將在這裏工作,或只是像往常一樣編輯時重新添加文件。

4

在上述情況下,如果您執行git commit,您將提交在執行git add(可能只創建空文件)之前所做的更改,而不是之後的更改。您可以使用git diff看到的差異:

git diff 

顯示您工作副本指數之間的差異,而

git diff --cached 

顯示指數和頭部之間的差異。 git diff --cached所示的差異將在git commit上承諾。

+1

要查看索引和HEAD'git diff --staged'之間的差異,也可以更直觀一些。 – 2009-12-04 08:46:37