分支就是一條獨立的時間線,既有分支,必有主干,正如一棵樹談到樹枝,必有樹干一樣的道理.我們先前對git 的全部操作默認都是在主干上進行的,這個主干也是一種特殊的分支,名為 master 分支.
無論是穿越歷史還是撤銷更改,我們都或多或少接觸過時間線,git 管理的版本串在一起就組成了這個時間線,其中master 分支是當前分支,HEAD 指向master ,因此HEAD 相當于指向了最新的版本.

git-commit.gif
基于分支上的操作,每一次 commit 都會提交一個新版本,并且新的 commit 指向原來的 commit,這來最新的 commit 就可以往前找,直到找到最初的commit.這就是 git 的時間線.
當我們打算開辟新的時間線時,git 在當前 HEAD 指向的 master 分支的 commit處新建一個 dev 分支.如果主角沒有主動進入時間線的話,那么仍然處于 master分支,進入的方法就是 HEAD指向新建的 dev 分支.
不考慮孫悟空的分身特效,主角不能同時處于不同的時空下,git 也是如何,HEAD只能指向某一個 commit ,既然剛剛已經指向了 dev 分支,所以原來的 master 分支就沒有 HEAD 了,因為相當于master 分支靜止了.
當主角在 dev 分支獨自闖蕩干出一番事業時,決定回到故鄉 master 分支,并將出門在外所學的本領帶回家鄉,建設美好家園.master 分支因為合并了 dev 分支,所以一下子增添了很多內容,家鄉煥然一新!
主角這次攜帶 dev 分支歸來,HEAD 分支自然又回到了 master 分支上,年輕的心向往外面的世間,相信不久后還會有同樣的故事發生...

git-branch.gif
下面詳解分支相關命令
創建分支
創建 dev 分支,列出分支已驗證是否創建成功

創建dev 分支
master 前面的 * 標記表明當前仍然處于 master 分支

git-on-master.png
切換分支
切換到新分支以便在分支上開展工作

切換到 dev分支

git-on-dev.png
現在,我們在 dev 分支上奮筆疾書,先后提交兩個版本后完成分支開發工作:


git-on-dev-commit1.png

git-on-dev-commit2.png
此時,再從 dev 分支切換回 master 分支,合并dev分支前看一下當前文件內容:

切換回 master 分支

git-checkout-master.png
合并分支
切換回 master 分支并沒有我們在 dev 分支的更改,因為兩條時間線是獨立的,現在合并 dev 分支,再看一下當前文件內容:

合并 dev 分支

git-merge-dev.png
刪除分支
合并分支后,dev 分支的歷史使命已經完成,應該及時清空不必要分支.


git-branch-d-dev.png
以上場景包括了分支的常用操作,創建分支(git branch ),切換分支(git checkout ),刪除分支(git branch -d )一系列操作十分流暢,因此 git鼓勵我們大量使用分支!
小結
- 列出分支 git branch
- 創建分支 git branch
- 切換分支 git checkout
- 創建并切換分支 git checkout -b
- 合并指定分支到當前分支 git merge
- 刪除分支 git branch -d