本文是通過學習《Pro Git》--作者Scott Chacon 後所做的整理和思考筆記。
《Pro Git》中文版 PDF 下載見
一.GIT管理下的檔案周期
1.新添加的檔案或檔案夾是untracked狀態,意思是git的版本管理裡沒有這個檔案。
可以用git add來把這個檔案加入git管理,之後就會是tracked中的stage狀態了。
如果是新git clone或git init的檔案,則是在tracked狀態裡的unmodified狀態。
注1:新添了檔案,untracked的狀態:
注2:用git add <檔案名稱> 將檔案加入git管理後,檔案是tracked下的staged狀態
2.在git的管理下的狀態是tracked狀態,包括unmodified,modified和staged三種狀態。
3.unmodified狀態指本地的檔案與版本庫裡該檔案最近一次的提交是一致的。
4.一旦修改了檔案,檔案內容與版本庫裡該檔案最近一次的提交內容不一致,狀態便變成modified。此時可以用git add <檔案> 來stage檔案。
stage之後的檔案可以用git commit <檔案> 來提交檔案或 git reset HEAD <檔案> 來取消stage狀態。
5.當一個檔案已經stage後,如果再做修改,此時的狀態是部分stage,部分modified。如果commit的話,會提交已經stage的那部分。
6.git add有多種功能,可以將untracked的檔案track,可以將modified的檔案stage,還可以將merge時conflict後來修改好的檔案再次stage。
問題:為什麼要有一個stage的狀態?修改了檔案要stage再commit不是很麻煩嗎?
我的答案:commit是一次對所有stage過的檔案的提交,沒有針對某一個檔案的commit。
一般說來,一次commit是完成一個版本的snapshot,可以修改一個檔案就stage,也可以修改完了很多檔案一起stage。stage就像一個箱子,把要commit的內容都裝上去。然後對裝箱的內容做commit操作。
如果修改好的檔案可以直接提交,可以用git commit -a來自動stage,即對全部修改自動裝箱提交。