# [Git] 分支解析
###### tags: `Git`
### 什麼是 HEAD?
HEAD 就是你目前指向的版本狀態,而 HEAD 可以選擇它指向到
* 分支 (branch)
* commit 版本
## 想看最初的版本?

如圖:切換成舊版本

此時 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 “分支名稱”
#### 原狀態

#### 新增分支
接下來,我們想要開始新增新功能,但又不能污染到目前 master 的穩定版本狀態,於是我們新增一個 dev 分支,指令是:`git branch dev`

#### 切換至分支
當我們要切換分支時,指令是:`git checkout dev`

#### 新增分支上commit
再來我們就開始在 dev 上開發,並新增兩個commit。

#### 切換回主狀態
接下來我們切換回 master 看它的狀態。指令是:`git checkout master`

#### <重要>合併分支:讓master吃到dev最新狀態
我們目前的狀態是 master 目前的版本比較舊,而 dev 的版本比較新,所以接下來我們要做的事情,就是讓 master 可以吃到 c3、c4 的 commit。
因為目前 master 版本比較舊,你就必須先用 `git checkout master` 指令,讓 HEAD 移動到 master。
確保有切換後,就可以下此指令:`git merge dev`
此時,master 位置就會在 c4 了。

#### 快轉模式 vs 非快轉模式
當你的 HEAD 位置是某個要被 merge branch(dev) 上的初始 commit,就會觸發快轉模式。

但如果在 master 再新增一個 commit 的話,就不會觸發快轉模式。
