幾乎全部的版本控制系統都以某種形式支持分支。 使用分支意味着你能夠把你的工做從開發主線上分離開來,以避免影響開發主線。 在不少版本控制系統中,這是一個略微低效的過程——經常須要徹底建立一個源代碼目錄的副本。對於大項目來講,這樣的過程會耗費不少時間。git
有人把Git的分支模型稱爲它的`‘必殺技特性’',也正由於這一特性,使得Git從衆多版本控制系統中脫穎而出。 爲什麼 Git的分支模型如此出衆呢?Git處理分支的方式可謂是難以置信的輕量,建立新分支這一操做幾乎能在瞬間完成,而且在不一樣分支之間的切換操做也是同樣便捷。 與許多其它版本控制系統不一樣,Git鼓勵在工做流程中頻繁地使用分支與合併,哪怕一天以內進行許屢次。ide
分支簡介
spa
用戶的每一次提交,Git都會把它們之間串成一條時間線,這條時間線就是一個分支。Git默認會有一條時間線,這條時間線就叫作master。版本控制
Git的master分支並非一個特殊分支,它跟其它分支徹底沒有區別,之因此幾乎每個倉庫都有master分支,是由於git init命令默認建立的。指針
Git的分支,其實本質上僅僅是指向提交對象的可變指針。Git的默認分支名字是master, 它會在每次的提交操做中自動向前移動。code
git branch testing #建立一個testing分支,會在當前所在的提交對象上建立一個指針xml
git log --oneline --decorate #查看當前處於那個分支上 對象
4555188 (HEAD -> master, testing) version—1 #HEAD指針指向master分支開發
Git有一個名爲HEAD的特殊指針,指向當前所在的本地分支,經過HEAD指針Git就能知道當前處於那個分支上面。工作流
git checkout testing Switched to branch 'testing'git log --oneline --decorate 4555188 (HEAD -> testing, test1, master) version—1 #HEAD指向了 testing 分支的做用:echo 「test1」 > a.py #修改a.py文件內容git commit -a -m 'version—2' #提交cat a.py #查看文件內容 testgit checkout master #切換分支,將工做目錄恢復成 master 分支所指向的快照內容cat a.py #查看文件內容(什麼都沒有)
也就是說,你如今作修改的話,項目將始於一個較舊的版本。 本質上來說,這就是忽略testing分支所作的修改,以便於向另外一個方向進行開發。
分支切換會改變你工做目錄中的文件,在切換分支時,要注意你工做目錄裏的文件會被改變。 若是是切換到一個較舊的分支,你的工做目錄會恢復到該分支最後一次提交時的樣子。
echo 「test
2
」 >
a
.py
#
修改
a.py
文件內容
git commit -a -m 'version—2' #提交cat a.py #查看文件內容
上述兩次改動針對的是不一樣分支:你能夠在不一樣分支間不斷地來回切換和工做,並在時機成熟時將它們合併起來
git log --oneline --decorate --graph --all
顯示提交歷史、各個分支的指向以及項目的分支分叉狀況
因爲Git的分支實質上僅是包含所指對象校驗和的文件,因此它的建立和銷燬都異常高效。 建立一個新分支就至關於往一個文件中寫入 41個字節(40個字符和1個換行符)
Git中,任何規模的項目都能在瞬間建立新分支。 同時,因爲每次提交都會記錄父對象,因此尋找恰當的合併基礎(即共同祖先)也是一樣的簡單和高效
詳細內容:https://git-scm.com/book/zh/v2/Git-分支-分支簡介