2013-01-22 269 views
4

我試圖圍繞着Git的錯綜複雜的頭部。爲什麼我必須使用「git commit -a」而不是「git commit」?

我使用「git clone [url here]」從GitHub中取出了一個存儲庫。

我做了一些改變,試圖用「git commit」提交它們。這似乎並沒有將更改推送到我的本地存儲庫(在本地目錄「.git),並且它建議我使用」git commit -a「來代替。

我想知道爲什麼我必須追加「-a」 到 「git的承諾」,並在什麼混帳

回答

8

-a--all
告訴命令自動階段已修改和刪除,但新的文件,你還沒有告訴不受影響git的文件。

Git有一個臨時區域。默認情況下,git commit僅提交添加到該暫存區域的數據。 -a開關提交所有未提交的工作副本本身。

暫存區域的想法是,您可能不想一次提交所有更改。如果是這種情況,你想要提交的文件是git add,或者如果你想要它更細化,你只需要git add -p並選擇一個文件內的一些改變來提交。

有一個很好的解釋以及圖像顯示如何,它基本上在GitHub上的Git教程作品:http://web.archive.org/web/20130519130755/http://learn.github.com/p/normal.html

+0

+1用於明確提及暫存區域並對其進行解釋。 –

1

git commit -a

「舞臺」 和 「提交」 之間的區別是短手:

git add file.txt 
git commit file.txt 

這只是將新文件提交到存儲庫的一種更簡單的方法。(文件必須先「添加」纔可以承諾)

6

你不需要。

-a選項要求git commit自動將所做的所有更改添加到存儲庫中的文件。

你並不總是那麼想。特別是因爲有時你想做出多個承諾來區分變更組。當你想要選擇要添加的內容時,通常在使用git add之前添加更改。

1

git -a commit顯然有我們必須做兩兩件事等同於

git add . 
git commit 
1

,如果我們要提交修改後的文件或未修復的文件

第一個是「分段」 第二個是「提交」

分段是任何提交旅程的中間階段,當然它是可選的。 暫存過程僅用於防止意外提交。一般而言,在提交前,如果我們輸入git commit,那麼所有被跟蹤文件中的任何新的未跟蹤文件或修改都需要執行,然後再進行提交。

簡單來說,升級的主要目的是防止意外提交。如果使用分段進程,在使用git checkout filename提交之前放棄任何更改都很方便。

看看這個頁面:http://git-scm.com/about/staging-area

如果你真的認爲你不需要升級,就可以使用git commit -a它只會犯被跟蹤文件中的所有當前未跟蹤文件和修改。

總是建議經歷分期,因爲您可以放棄任何您不想在當前提交中進行的更改。如果您使用git commit -a,則不必使用git add filename進行分段