分支與合併
branch、merge
分支與合併可說是版本管控與協同開發時最需要了解的地方。
儲存庫的目錄樹
觀察主要分支
儲存庫在首次提交之後,預設就會產生一個主要分支,名稱為 master,它是一個指標,指向最新的提交點,另外還會有一個指標稱之為 HEAD,它會指向目前作用的分支,在進行第二次提交時,master 指標會移動到第二個提交點,當然因為目前只有主要分支,所以 HEAD 仍然指向 master,也會跟著移動到第二個提交點。
請注意 master 檔案的內容就是最後一次 commit 的雜湊值(40bit SHA-1)、HEAD檔案的內容就是master 檔案的路徑。 總之每一個分支,都會指向某個 commit 物件,而 HEAD 則會指著某一個分支。
Git 的標籤(tag)功能跟分支很像,差別在於 commit 時,分支指標會自動隨著往後移動,但標籤要手動設定,所以標籤定下來之後就不會再移動,因此分支指標會指向該分支最後一次提交,而標籤指標會指向有特定意義(例如 v1.3版)的提交。
建立分支
透過以下指令就可建立分支 testing,可想像最後一次的提交點上擁有 master 與 testing 二個分支 (指標)
查詢分支
透過以下指令可查詢目前有多少分支存在
切換分支
透過以下 git checkout 指令就可切換到分支 testing,此時 HEAD 指標改為指向 testing 這個分支
切換分支的同時,會將該分支的工作區一起切換到該分支當時的狀況。
請留意 checkout在此為切換分支的意思,並非取回檔案
建立後同時切換分支
建立與切換分支二行指令,可合併為以下一行
若目前分支與想切換的分支指向不同的提交點,在工作區有檔案異動尚未暫存或暫存區有檔案尚未提交時,是無法切換分支的。
在分支中隱藏封存目前進度(*進階)
若在分支中的工作尚未完成,所以無法 commit ,但又需要暫時切換到其他分支,此時可使用隱藏功能,將受 git 控管的檔案狀態暫時 stash 隱藏封存起來,
在分支提交
因為已經切換到 testing 分支,接下來透過以下指令提交
切換回主要分支
透過以下指令可切換回 master 分支,但此時請注意 HEAD 指標移動時會造成工作目錄的檔案內容改變,因此在 testing 分支增加的檔案,在切換到 master 分支後會看不見,因此若在 testing 分支中有檔案增修過但沒有提交(commit) 或隱藏(stash) 時,就不能夠切換分支(移動 HEAD)。
在主要分支提交
透過下列指令在主要分支提交時,此時產生的 commit 節點就是獨立的一條路徑了,未來可以在不同的分支切換,之後等 testing 的工作完成後,再合併回 master
參考網頁
Last updated