Git 管理項目時,檔案流轉的三個工作區域:Git 的工作目錄,暫存地區,以及本地倉庫。基本的 Git 工作流程如下:1. 在工作目錄中修改某些檔案。2. 對修改後的檔案進行快照,然後儲存到暫存地區。3. 提交更新,將儲存在暫存地區的檔案快照永久轉儲到 Git 目錄中。
工作目錄下面的所有檔案都不外乎這兩種狀態:已跟蹤或未跟蹤。已跟蹤的檔案是指本來就被納入版本控制管理的檔案,在上次快照中有它們的記 錄,工作一段時間後,它們的狀態可能是未更新,已修改或者已放入暫存區。而所有其他檔案都屬於未追蹤檔案。它們既沒有上次更新時的快照,也不在當前的暫存 地區。初次複製某個倉庫時,工作目錄中的所有檔案都屬於已追蹤檔案,且狀態為未修改。
在編輯過某些檔案之後,Git 將這些檔案標為已修改。我們逐步把這些修改過的檔案放到暫存地區,直到最後一次性提交所有這些暫存起來的檔案,如此重複。所以使用 Git 時的檔案狀態變化周期。
Git 儲存的不是檔案差異或者變化量,而只是一系列檔案快照。在 Git 中提交時,會儲存一個提交(commit)對象,該對象包含一個指向暫存內容快照的指標,包含本次提交的作者等相關附屬資訊,包含零個或多個指向該提交對 象的父物件指標:首次提交是沒有直接祖先的,普通提交有一個祖先,由兩個或多個分支合并產生的提交則有多個祖先。
Git 中的分支,其實本質上僅僅是個指向 commit 對象的可變指標。Git 會使用 master 作為分支的預設名字。它在每次提交的時候都會自動向前移動。分支其實就是從某個提交對象往回看的曆史。
$ git branch testing
這會在當前 commit 對象上建立一個分支指標
Git 是如何知道你當前在哪個分支上工作的呢?其實答案也很簡單,它儲存著一個名為 HEAD 的特別指標。它是一個指向你正在工作中的本地分支的指標。
$ git checkout testing
這樣 HEAD 就指向了 testing 分支
再提交一次後的結果。
每次提交後 HEAD 隨著分支一起向前移動
現在 testing 分支向前移動了一格,而 master 分支仍然指向原先所在的 commit 對象。現在我們回到 master 分支看看:
$ git checkout master
如顯示了結果。HEAD移動到了master分支
修改後再次提交後的效果
參考手冊:http://gitref.org/branching/參考手冊中文版:http://gitref.cyj.me/zh/branching/#log深入學習:http://blog.csdn.net/yesterdaylike/article/details/7525525