常常在專案開發時或產品推出後,我們會想加入新的功能或多項新的功能到目前的專案上,或是要解決一些 Bug, 但要在開發完整前需要充分測試完才能進入下一個階段,這個時候專案分支就可以應用上,分支是 Git 很強的功能之一,複雜的分支可能像是
(https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows 截圖)
在開發新的功能階段,我們可能還需要對已經在市場的產品進行臭蟲修改,例如
因此分支的管理對於專案而言,其重要性不可言喻
Magit 裡跟分支有關的次指令是使用 b,按下 b 會出現另一個指令緩衝區 
這個次指令下
c)l,等等c 來建立一個分支,Magit 會問這個分支要從哪裏分出來,這裏我們選 master 

利用 b c 跟 b l 來建立及切換分支,最後我們建立了 branch1 (基於 master),branch2 (基於 branch1),中間對 Master 做了一個 hotfix跟 commit
我們對於 branch2 已經非常滿意,現在要把它合併回 master,先用 b l 切回 master,按 m (merge)
這個指令也有次指令如圖 
再按一次 m ,會問你要跟哪ㄧ個分支合併
選擇 branch2 後 
無法合併,因為有衝突,衝突來自於 test.txt 這個檔案 branch2 跟 master 都修改過,我們需要來解決衝突 (conflict)
Emacs 使用 Ediff 來解決衝突,按 E 來啟動 Ediff
一樣有次指令,再按 m (Resolve) 來解決衝突,如果有多個衝突的地方,按 p 或者 n 來選擇要解決的地方 
這裏有三個緩衝區,上面左邊來自於 Master 分支(稱為 a),上面右邊來自於 branch2 分支 (稱為 b),下面是合併完的檔案樣子(稱為 c),這裏的指令可以按 ? 來開啟幫助緩衝區 
因為 branch2 修改比較多,我們先將右邊(b) 複製到 (c),直接按 b 
然後直接再 (c) 打入 (a) 的 hotfix 部分,滿意後按 q 然後存檔 (yes)
這個時候 master 分支已經將 branch2 合併進來 
做一個 commit 
預設會直接給你 Merge branch 'branch2' 的訊息,Ctrl-c Ctrl-c 來完成
看一下 log 按 l l
Rebase 通常使用在整理或者修改已經 commit 過的歷史,Magit 讓你可以互動式做 rebase,rebase 可以做
假設上面合併完成的歷史,我們不滿意它看起來很複雜,不是一系列,我們來用 Rebase 修改它
先將 log 用 l l 叫出來,將游標移動到分支的最起點,second commit 的地方 
按一下 r,會出現 rebase 次指令 
我們使用互動式 i interactively 來整理從剛剛游標的commit 一直到最近的 commit 
它的順序是從舊到新,最上面是 second commit,一直到最新的 commit to branch2
這個介面讓我們可以用 Meta-n Meta-p 來重新排列 commit 的歷史,可以按 s 來 squash 某些 commit,完整的指令如 
假設我們把 branch1 squash 掉,
合併時按 Ctrl-c Ctrl-c,可能會產生衝突 (conflict),用 Ediff 解決
做 commit, 修改因為 squash branch1 到 master 的原始訊息 
再按一次 r 繼續 rebase 按 r continue 
最後的 Log 會是乾淨清爽的 
Magit 支援遠端資源庫的指令有
M Remoting : 來加入新的或命名遠端的名稱 (origin)P Pushing: 將本地資源庫送到遠端f Fetching: 取遠端資料庫F Pulling: 取遠端資料庫並合併到本地這些指令比較容易,詳細操作可以看我的影片
