3.1 使用Git 分支 | Git branch commit
幾乎每一種版本控制系統(VersionControlSystem,以下簡稱VCS)都支援某種形式的分支(branch)功能,使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的情況下繼續工作;在很多VCS中,這是個昂貴的過程,常常需要對原始程式碼目錄建立一個完整的副本,對大型專案來說會花費很長時間。有人把Git的分支模型視為它的「殺手級功能」,正是因為它而讓Git在VCS社群中顯得與眾不同。它有何特別之處呢?Git的分支簡直是難以置信的羽量級,新建分支的操作幾乎可以在瞬間完成,並且一般來說切換不同分支也很快;跟其它的VCS不一樣...
幾乎每一種版本控制系統(Version Control System,以下簡稱 VCS)都支援某種形式的分支(branch)功能, 使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的情況下繼續工作; 在很多 VCS 中,這是個昂貴的過程,常常需要對原始程式碼目錄建立一個完整的副本,對大型專案來說會花費很長時間。
有人把 Git 的分支模型視為它的「殺手級功能」,正是因為它而讓 Git 在 VCS 社群中顯得與眾不同。 它有何特別之處呢? Git 的分支簡直是難以置信的羽量級,新建分支的操作幾乎可以在瞬間完成,並且一般來說切換不同分支也很快; 跟其它的 VCS 不一樣的地方是 Git 鼓勵在工作流程中頻繁地使用分支與合併(merge),即使一天之內進行許多次都沒問題。 理解並掌握這個特性後,它會給你一個強大而獨特的工具,從此完全地改變你的開發方式。
簡述分支為了理解 Git 分支(branch)的使用方式,我們需要回顧一下 Git 是如何保存資料的。
或許你還記得 [ch01-introduction][1] 的內容,Git 保存的不是變更集或者差異內容,而是一系列快照。
當你製造一個提交(commit)時,Git 會儲存一個提交物件,該物件內容包含一個指標,用來代表已預存的快照內容; 這個物件內容還包含「作者名字和電子郵件」、「你輸入的訊息內容」、「指向前一個提交的指標(該提交的親代提交)」:沒有親代(parent)提交表示它是初始的第一個提交,一般情況下只有一個親代提交,超過一個親代提交表示它是從二個以上的分支合併而來的。
為了具體說明,讓我們假設你有一個目錄包含了三個檔案,你預存(stage)並提交了它們; 檔案預存操作會對每一個檔案內容(譯註:請注意,只有檔案「內容」)計算雜湊值(即 [ch01-introduction][2] 中提到的 SHA-1 雜湊值),然後把那個檔案內容版本保存到 Git 版本庫中(Git 把它們視為 blob 類型的物件),再將這個雜湊值寫入預存區(staging area):
$ git add README test.rb LICENSE $ git commit -m The initial commit of ...