跳至主要内容

[Git] 分支

TL;DR

在開發的時候,有時候可能會不確定哪個路線比較好。但是又希望可以很好的控制版本,這時候就可以使用分支。

參考資料

相關連結


什麼是HEAD

Head就是一個指向目前位置的箭頭,如果前面建立好幾個commit(預設分支為main),則在一般未更動的狀態下Head會跟main一起往前走,如果今天新增了下一個commit,main跟Head會一起指向最後一個commit的位置(如下圖) HEAD圖示

HEAD能做什麼

當今天位於C3時,可以使用git log呼叫出歷史紀錄,而在歷史紀錄旁邊會有一個SHA-1的版本號碼

這時候使用git checkout “版本號碼”來修改HEAD位置,則工作目錄下的檔案就會像是搭乘時光機一般回到該版本的狀態

分支簡介

在實務開發上可能會分成測試版本、正式版本等等。在開發上不能將全部的專案都混在一起,這時候就可以利用分支來個別開發,當測試沒問題時再合併將功能合併起來

分支是git上很重要的一個功能,所以這邊需要花多一點心力好好學習!!

分支圖示

建立新分支

假設目前我們沒有自己創立分支,預設目前所在的分支為main(有些版本為master),下圖為例目前有兩個commit,而HEAD會位於最後一個commit上 建立分支範例圖片

此時我們想要創立一個測試用的分支,可以使用以下指令來創建一個分支:

git branch <分支名稱>

創建成功之後會出現一個新的分支(以下圖為例,輸入git branch dev會出現一個新的分支dev) 建立分支範例圖片

caution

需要注意!此時的HEAD仍然在main(or master)

因為此時的HEAD仍然在master上,所以我們需要利用指令切換分支,輸入以下指令切換分支到dev上:

git checkout dev

建立分支範例圖片

在新分支上新增Commit

我們目前已經在dev上了,這時候如果再額外修改,並且新增兩個commit。結果如下: 建立分支範例圖片

建立分支範例圖片

Checkout

此時,我們可以使用以下指令暫時先回到原本的main分支:

git checkout main

這時,回去查看目前專案的狀態,可以發現剛剛在dev上面修改的內容都不見了。這就是使用git管理的好處。我們可以回到任何一個commit的時間點,去查看該時間點的檔案。

info

看得到別的分支的log嗎?

回到main分支時。此時使用git log去查看,也只能看到main分支的紀錄。並沒有辦法看到剛剛在dev分支所新增的兩筆commit內容。

分支的合併

既然可以創建分支,那麼就也會有合併分支的需求。

指令如下:

git merge <欲合併分支名稱>

快轉/非快轉

如果要合併的分支,與要被合併的分支的起始點相同,就會觸發快轉模式。

快轉模式圖示

這時就不會產生一個新的節點。

如果希望在合併(merge)的時候,額外產生一個新的節點,那麼需要在指令內新增--no-ff的選項如下:

git merge <被合併分支名稱> —-no—ff

Git分支遊戲

Git在分支上還有其他很多的指令,用來滿足我們在開發上的需求。除了merge之外也還有rebase可以使用。 這邊提供一個分支操作的小遊戲