12/12 本篇章節
第六篇 · 12 章
使用分支
- 01 為什麼要使用分支?
- 02 開始使用分支
- 03 對分支的誤解 僅收錄於電子書
- 04 合併分支
- 05 【狀況題】為什麼我的分支都沒有「小耳朵」?
- 06 【常見問題】合併過的分支要留著嗎?
- 07 【狀況題】不小心把還沒合併的分支砍掉了,救得回來嗎?
- 08 另一種合併方式(使用 rebase)
- 09 合併發生衝突了,怎麼辦?
- 10 【冷知識】為什麼大家都說在 Git 開分支「很便宜」?
- 11 【冷知識】Git 怎麼知道現在是在哪一個分支?
- 12 【狀況題】我可以從過去的某個 Commit 再長一個新的分支出來嗎?
第六篇 · 使用分支
【狀況題】我可以從過去的某個 Commit 再長一個新的分支出來嗎?
我想大家一定都有過「如果我在年輕的時候做了另一個選擇,現在一定會不一樣!」的想法。人生,很多事情不能重來,但我們可以用 Git 來補足這個缺憾(咦?)。
回到過去,重新開始
假設我們現在的歷史紀錄是這樣的:

我想要從 add container 那個 Commit (657fce7)再做出新的分支,首先,你得先回到那個 Commit 的狀態,這時候使用的 git checkout 指令:
$ git checkout 657fce7
Note: checking out '657fce7'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 657fce7... add container
這段訊息跟你說,你正處於「detached HEAD」的狀態(請參閱「【冷知識】斷頭(detached HEAD)是怎麼一回事?」章節說明)。你可以從現在這個 Commit 開新的分支出去,讓我們直接使用 Checkout 指令的 -b 參數直接建立分支並自動切換過去:
$ git checkout -b bird
Switched to a new branch 'bird'
這樣就開好一個 bird 分支了。現在的狀況變成這樣:

咦?不是開分支了?怎麼沒有「樹枝」的樣子?別忘了,分支只是一個像貼紙之類的東西,詳情請參閱「對分支的誤解」章節。
開好分支,你就可以從這個分支開始再繼續 Commit 了。
一行搞定
如果不想先飛過去再開分支,也是可以直接一行搞定:
$ git branch bird 657fce7
意思就是「請幫我用在 657fce7 這個 Commit 上開一個叫做 bird 的分支」,其實更應該說「請幫我在 657fce7 這個 Commit 上幫我貼上一張 bird 的分支貼紙」。同時,使用 Checkout 指令配合 -b 參數也可以有開分支的效果,而且還會直接切換過去:
$ git checkout -b bird 657fce7
Switched to a new branch 'bird'
使用 SourceTree
使用 SourceTree 在指定的地方開分支滿方便的,只要在想開分支的 Commit 上按滑鼠右鍵,選擇「Branch...」功能:

填寫好新的分支的名字:

按下右下角的「Create Branch」按鈕即可完成。