[Git] 分支
TL;DR
在開發的時候,有時候可能會不確定哪個路線比較好。但是又希望可以很好的控制版本,這時候就可以使用分支。
參考資料
相關連結
HEAD
什麼是HEAD
Head就是一個指向目前位置的箭頭,如果前面建立好幾個commit(預設分支為main),則在一般未更動的狀態下Head會跟main一起往前走,如果今天新增了下一個commit,main跟Head會一起指向最後一個commit的位置(如下圖)
HEAD能做什麼
當今天位於C3時,可以使用git log
呼叫出歷史紀錄,而在歷史紀錄旁邊會有一個SHA-1的版本號碼
這時候使用git checkout “版本號碼”
來修改HEAD位置,則工作目錄下的檔案就會像是搭乘時光機一般回到該版本的狀態
分支簡介
在實務開發上可能會分成測試版本、正式版本等等。在開發上不能將全部的專案都混在一起,這時候就可以利用分支來個別開發,當測試沒問題時再合併將功能合併起來
分支是git上很重要的一個功能,所以這邊需要花多一點心力好好學習!!
建立新分支
假設目前我們沒有自己創立分支,預設目前所在的分支為main(有些版本為master),下圖為例目前有兩個commit,而HEAD會位於最後一個commit上
此時我們想要創立一個測試用的分支,可以使用以下指令來創建一個分支:
git branch <分支名稱>
創建成功之後會出現一個新的分支(以下圖為例,輸入git branch dev會出現一個新的分支dev)
需要注意!此時的HEAD仍然在main(or master)
因為此時的HEAD仍然在master上,所以我們需要利用指令切換分支,輸入以下指令切換分支到dev上:
git checkout dev
在新分支上新增Commit
我們目前已經在dev上了,這時候如果再額外修改,並且新增兩個commit。結果如下:
Checkout
此時,我們可以使用以下指令暫時先回到原本的main分支:
git checkout main
這時,回去查看目前專案的狀態,可以發現剛剛在dev上面修改的內容都不見了。這就是使用git管理的好處。我們可以回到任何一個commit的時間點,去查看該時間點的檔案。
看得到別的分支的log嗎?
回到main分支時。此時使用git log去查看,也只能看到main分支的紀錄。並沒有辦法看到剛剛在dev分支所新增的兩筆commit內容。
分支的合併
既然可以創建分支,那麼就也會有合併分支的需求。
指令如下:
git merge <欲合併分支名稱>
快轉/非快轉
如果要合併的分支,與要被合併的分支的起始點相同,就會觸發快轉模式。
這時就不會產生一個新的節點。
如果希望在合併(merge)的時候,額外產生一個新 的節點,那麼需要在指令內新增--no-ff
的選項如下:
git merge <被合併分支名稱> —-no—ff
Git分支遊戲
Git在分支上還有其他很多的指令,用來滿足我們在開發上的需求。除了merge之外也還有rebase可以使用。 這邊提供一個分支操作的小遊戲