# [Git] 分支解析 ###### tags: `Git` ### 什麼是 HEAD? HEAD 就是你目前指向的版本狀態,而 HEAD 可以選擇它指向到 * 分支 (branch) * commit 版本 ## 想看最初的版本? ![](https://i.imgur.com/vOdgpJb.png) 如圖:切換成舊版本 ![](https://i.imgur.com/4SPxVgE.png) 此時 HEAD 就會派上用場了,我們必須透過他對到我們指定 commit 版。此時我們必須先知道該 commit 的 SHA-1 編號,可以用 git log 查詢。 [HEAD回魂操作方法](https://w3c.hexschool.com/git/9a164fbe) 指令則是`git checkout 1849273`<指定 commit SHA-1> 切換後,你就可以看到自己的工作目錄,彷彿用了時光機,回到以前你指定的開發歷史狀態。 ### 再切換到最新狀態的話呢? 你可以使用此指令:讓 HEAD 再綁定回 master 的分支即可 `git checkout master` ## 分支建立(git branch) 分支的好處,就是每一條線都各司其職,做完事後,再將兩條線的功能合併,並部署上線。 分支切換語法如下: 1. * ##### 新增分支:git branch “分支名稱” 1. * ##### 切換分支:git checkout “分支名稱” 1. * ##### 切回主流:git checkout master 1. * ##### 分支合併為主流:git merge “分支名稱” #### 原狀態 ![](https://i.imgur.com/MgCXoVk.png) #### 新增分支 接下來,我們想要開始新增新功能,但又不能污染到目前 master 的穩定版本狀態,於是我們新增一個 dev 分支,指令是:`git branch dev` ![](https://i.imgur.com/lUqjIUp.png) #### 切換至分支 當我們要切換分支時,指令是:`git checkout dev` ![](https://i.imgur.com/ozHA9J8.png) #### 新增分支上commit 再來我們就開始在 dev 上開發,並新增兩個commit。 ![](https://i.imgur.com/CqXfI38.png) #### 切換回主狀態 接下來我們切換回 master 看它的狀態。指令是:`git checkout master` ![](https://i.imgur.com/9J9lPZv.png) #### <重要>合併分支:讓master吃到dev最新狀態 我們目前的狀態是 master 目前的版本比較舊,而 dev 的版本比較新,所以接下來我們要做的事情,就是讓 master 可以吃到 c3、c4 的 commit。 因為目前 master 版本比較舊,你就必須先用 `git checkout master` 指令,讓 HEAD 移動到 master。 確保有切換後,就可以下此指令:`git merge dev` 此時,master 位置就會在 c4 了。 ![](https://i.imgur.com/uClnoKg.png) #### 快轉模式 vs 非快轉模式 當你的 HEAD 位置是某個要被 merge branch(dev) 上的初始 commit,就會觸發快轉模式。 ![](https://i.imgur.com/MXgcQUe.png) 但如果在 master 再新增一個 commit 的話,就不會觸發快轉模式。 ![](https://i.imgur.com/4p1ym2u.png)