[基本概念] 
GIT branch 的本質是一個提交鏈表的指針。創建一個新的branch,實質是創建了當時提交鏈表的一個新指針。該指針和原指針獨立操作,各自疊加新的提交后,形成各自的分支鏈。
“在分支上”的含義,新建一個分支之后,建立此分支以前的提交也稱為在這個分支上。
HEAD的含義:當前branch。 隨著git branch checkout <branch> 改變。
分支不是線形性:如果發生過merge,則即使 HEAD 相同,鏈表也不具有唯一性。(即某些提交有多父情況)
 
為什么要及時刪掉不用的分支:防止提交查看時顯示過多的分支。
merge 時,如果自動merge沒有沖突,則 GIT 產生一個新的提交。如果有 沖突,則GIT產生一個未提交。
實踐中,可以有三個分支:
1, master
2, dev
3, Topic:針對某個具體問題,短期存在,需要經常的rebase。
問題:如果刪除一個分支,那么它上面的未 merge 的提交會一起刪除嗎?
[基本操作]
查看分支:                                       $ git branch
創建分支:                                      $ git branch mybranch
切換分支:                                      $ git checkout mybranch
創建并切換分支:                                $ git checkout -b mybranch
合并分支:(merge from)                          $ git checkout master
                                                $ git merge mybranch   (merge from mybranch)
使用 merge工具(有沖突的情況下):              $ git mergetool
刪除分支:                                      $ git branch -d mybranch
強制刪除分支 (上面有尚未 merge 的提交):        $ git branch -D mybranch
列出所有分支:                                  $ git branch
查看各個分支最后一次提交:                      $ git branch -v
查看哪些分支合并入當前分支(可以刪了):        $ git branch --merged
查看哪些分支未合并入當前分支:                  $ git branch --no-merged
遠程: 
更新遠程庫到本地:                              $ git fetch origin
如果有新分支,則分支名:orgin/<branch>
 
取遠程分支合并到本地分支:                      $ git merge origin/mybranch
用遠程分支建一個本地分支:                      $ git checkout -b mybranch origin/mybranch
推送分支:                                      $ git push origin mybranch
 
推送分支,并換個名字:                          $ git push origin serverfix:awesomebranc
刪除遠程分支:                 $ git push origin  :mybranch
 
rebase:                                         $ git checkout mybranch
                                                $ git rebase master    (rebase from master)
 
舉例:                                          $ git checkout server
                                                $ git rebase --onto master server client
                                                $ git checkout master
                                                $ git merge client  (fostforward)
                                                $ git rebase master server  (checkout sever)
                                                $ git merge server
                                                $ git branch -d client
                                                $ git branch -d server
 
merge 和 rebase 的區別:
1),從文件結果看,merge 和 rebase 可以達到同樣效果。 
2),從歷史紀錄看,他們存在差異:merge 顯示合并后的多父結點,呈現環形, 而 rebase 呈現線性結果,即它對分支歷史進行合并操作。rebase 提供更好的歷史呈現方式(似分支從未曾發生過),但有風險。 掌握一條原則:Do not rebase commits that you have pushed to a public repository. 即,不要對你提交過的分支進行 rebase。因為本地的改變會造成遠端的困惑。 
3), 在實踐中,可以盡量用 merge,慎用 rebase。