1. 程式人生 > >Git基礎入門(八)Git分支的基本概念

Git基礎入門(八)Git分支的基本概念

git 版本控制 分支管理

幾乎所有的版本控制系統都以某種形式支持分支。 使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。 在很多版本控制系統中,這是一個略微低效的過程——常常需要完全創建一個源代碼目錄的副本。對於大項目來說,這樣的過程會耗費很多時間。

有人把Git的分支模型稱為它的`‘必殺技特性’,也正因為這一特性,使得Git從眾多版本控制系統中脫穎而出。 為何 Git的分支模型如此出眾呢?Git處理分支的方式可謂是難以置信的輕量,創建新分支這一操作幾乎能在瞬間完成,並且在不同分支之間的切換操作也是一樣便捷。 與許多其它版本控制系統不同,Git鼓勵在工作流程中頻繁地使用分支與合並,哪怕一天之內進行許多次。


分支簡介

用戶的每一次提交,Git都會把它們之間串成一條時間線,這條時間線就是一個分支。Git默認會有一條時間線,這條時間線就叫做master


Gitmaster分支並不是一個特殊分支,它跟其它分支完全沒有區別,之所以幾乎每一個倉庫都有master分支,是因為git init命令默認創建的。

Git的分支,其實本質上僅僅是指向提交對象的可變指針。Git的默認分支名字是master, 它會在每次的提交操作中自動向前移動。

git branch testing #創建一個testing分支,會在當前所在的提交對象上創建一個指針

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 “test2” > 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-分支-分支簡介


本文出自 “自動化運維” 博客,請務必保留此出處http://hongchen99.blog.51cto.com/12534281/1977719

Git基礎入門(八)Git分支的基本概念