Git: 如何從特定 commit 切新的分支?

Git

本文說明如何從特定 commit 切新的分支、為新分支命名、將新分支合併回主線、退回尚未合併分支的狀態與刪除用不到的分支。

初始狀態

下圖是初始狀態,此時位於分支 master,HEAD 指向目前所在分支,見紅框。

detached HEAD

Step 1:切換到特定的 commit

切換到要開分支的 commit「1b3941132」。

git checkout 1b3941132

此時 HEAD 指向「1b3941132」,見紅框,是為 detached HEAD。HEAD 是一個「指向目前所在分支」的指標,若 HEAD 不指向任何分支,即是 detached HEAD。

detached HEAD

做一些修改後再次 commit,會看到由 commit「1b3941132」長大到 commit「3c85a77d1」,見藍線部份。

detached HEAD

Step 2:為此新分支命名

利用以下方式為此新分支命名。

git checkout -b <branch_name>

例如,將新分支命名為「feature」。

git checkout -b feature

在 Source Tree 底下就可以看到已開好新的分支「feature」。

為此新分支命名

後續還有新增一些修改,於是來到 commit「4b86a7932」,見藍線部份。

為此新分支命名

Step 3:利用 merge 合併這個新分支到 master

首先先切回分支 master。

git checkout master

然後,將 feature 上的 commit 合併到 master,可用以下任一方法

在這裡選用分支名稱來合併。

git merge feature

這裡會產生一個合併的 commit「Merge branch ‘feature’」,如下圖,藍線表示 master,紅線表示分支 feature,從 commit「1b3941132」切出去,再由 commit「ce339a5a5」合併回到 master。

detached HEAD

Step 4:退回尚未合併分支的狀態

ORIG_HEAD 會記錄最近一次「危險操作」之前 HEAD 的位置,因此以下指令可退回危險操作前的位置,也就是退回尚未合併分支的狀態。

git reset ORIG_HEAD --hard

由於前一步是在分支 master,所以退一步後,依舊在分支 master,並且回到尚未合併的狀態,即是 commit「0663953c1」。

detached HEAD

Step 5:刪除用不到的分支

合併完後,刪除用不到的分支。

刪除本機分支,可用

如下,刪除分支 feature。

git branch -d feature

顯示成功刪除分支 feature 的訊息。

Deleted branch feature (was 4b86a7932).

刪除遠端分支,可用 git push origin <空白>:<branch_name>。如下,刪除遠端分支 feature。

git push origin :feature

git git merge git branch Sourcetree