10/12 本篇章節
第六篇 · 12 章
使用分支
- 01 為什麼要使用分支?
- 02 開始使用分支
- 03 對分支的誤解 僅收錄於電子書
- 04 合併分支
- 05 【狀況題】為什麼我的分支都沒有「小耳朵」?
- 06 【常見問題】合併過的分支要留著嗎?
- 07 【狀況題】不小心把還沒合併的分支砍掉了,救得回來嗎?
- 08 另一種合併方式(使用 rebase)
- 09 合併發生衝突了,怎麼辦?
- 10 【冷知識】為什麼大家都說在 Git 開分支「很便宜」?
- 11 【冷知識】Git 怎麼知道現在是在哪一個分支?
- 12 【狀況題】我可以從過去的某個 Commit 再長一個新的分支出來嗎?
第六篇 · 使用分支
【冷知識】為什麼大家都說在 Git 開分支「很便宜」?
所謂的分支,其實就只是一個有 40 個字元的檔案而已,它藏在 .git 目錄裡面,讓我們進去挖出來給大家看看。先看一下現在有哪些分支:
$ git branch
cat
dog
* master
目前總共有 cat、dog 以及 master 三個分支。

分支的資訊放在哪裡?打開 .git 目錄,裡面有一個 refs 目錄,再往下有個 heads 子目錄:

所謂的分支其實就是放在這裡了!
小提示
.小數點開頭的目錄跟檔案通常預設會被作業系統標記成隱藏檔,所以可能會需要打開「檢視隱藏檔」的設定才看得到喔。
看一下這些檔案的內容:
$ cat .git/refs/heads/master
e12d8ef0e8b9deae8bf115c5ce51dbc2e09c8904
$ cat .git/refs/heads/cat
dd8d48000140bcc66ed0aa5630b6072d5956d32e
$ cat .git/refs/heads/dog
919df8e360cf2482ff42dd0566f615263fa17214
這些數字好像在哪裡看過?你再比對一下上面 SourceTree 的那個畫面,就會發現其實這三個檔案的內容,就只是某個 Commit 的 SHA-1 值而已!
那如果把這些檔案刪掉會怎麼樣嗎?
那就把 .git/refs/heads/dog 這個檔案刪掉吧:
$ rm .git/refs/heads/dog
這時候的分支列表:
$ git branch
cat
* master
那個 dog 分支就不見了。是的,不用懷疑,在 Git 的分支就只有這樣而已,不信的話,我們來把 .git/refs/heads/cat 這個檔案改名成 bird 看看:
$ mv .git/refs/heads/cat .git/refs/heads/bird
再回來看分支列表:
$ git branch
bird
* master
原來的 cat 分支變成 bird 分支了。
所以,回來原來的問題,為什麼大家都說在 Git 開分支「很便宜」? 所謂的分支不就是一個只有 40 個字元(某個 Commit 的 SHA-1 值)的檔案,所以在 Git 開一個分支是能多「貴」呢 :)