Git初学札记(五)————Branch分支管理
引言
正如之前的博客中提到的,Git區(qū)別于Svn的一個最明顯的功能就是分支管理功能。
那么什么是分支?分支又能為我們的開發(fā)帶來什么翻天覆地的變化呢?(為了使博客的內(nèi)容更具權(quán)威性和專業(yè)性,以下部分內(nèi)容摘自官方文檔《Git - 分支簡介》)。
什么是分支
分支,顧名思義,從主干分離的枝干。使用分支意味著你可以把你的工作從開發(fā)主線上分離開來,以免影響開發(fā)主線。
分支并不是Git特有的功能特性,但是相比于其他的版本控制系統(tǒng),Git處理分支的方式可謂是難以置信的輕量,創(chuàng)建新分支這一操作幾乎能在瞬間完成,并且在不同分支之間的切換操作也是一樣便捷。與許多其他版本控制系統(tǒng)不同,Git鼓勵在工作流程中頻繁地使用分支與合并(branch 和 merge)。
理解和精通這一特性,我們便會意識到Git是如此的強(qiáng)大而又獨(dú)特,并且從此真正改變我們的開發(fā)方式。
創(chuàng)建分支
創(chuàng)建分支的命令是git branch :
$ git branch testing根據(jù)Git的工作原理(在此不做討論,可以參見《起步 - Git基礎(chǔ)》),上面這行命令會在當(dāng)前所在的提交對象上創(chuàng)建一個指針。
此時,兩個指向相同提交歷史的分支,而Git又是如何知道當(dāng)前在哪一個分支上呢?其實(shí),Git中還存在一個名為HEAD的特殊指針。在Git中,HEAD指向當(dāng)前所在的本地分支(將HEAD想象為當(dāng)前分支的別名)。$ git branch命令僅僅會創(chuàng)建一個新分支,并不會自動切換到新分支中去。
可以使用$ git log 命令查看各個分支當(dāng)前所指對象。
$ git log --oneline --decorate f30ab (HEAD, master, testing) add feature #32 - ability to add new 34ac2 fixed bug #1328 - stack overflow under certain conditions 98ca9 initial commit of my project可以看到,當(dāng)前master和testing分支都指向校驗和以 f30ab 開頭的提交對象。
切換分支
更換到一個已經(jīng)存在的分支,需要使用$ git checkout 命令。
$ git checkout testing可以再次進(jìn)行開發(fā),并提交:
$ vim test.rb $ git commit -a -m 'made a change'執(zhí)行完提交后,HEAD分支就會隨著提交操作自動向前移動,如上圖所示,testing 分支向前移動了,但是master分支卻沒有,它仍然指向運(yùn)行 git checkout 時所指向的對象。
我們再次切換回 master 分支上:
$ git checkout mastercheckout 時HEAD隨之移動,這條命令完成了兩件事:第一是將HEAD指向 master 分支,第二是將工作目錄恢復(fù)成master 分支所指向的快照內(nèi)容。也就是說,你現(xiàn)在做修改的話,項目將始于一個較舊的版本。本質(zhì)上來講,這就是忽略 testing 分支所做的修改,以便向另一個方向進(jìn)行開發(fā)。
此時,如果我們不進(jìn)行分支合并(merge操作),而是朝著另一個方向進(jìn)行了修改,那么我們就會出現(xiàn)如下圖所示的分支結(jié)構(gòu):
可以看到,項目的提交歷史已經(jīng)產(chǎn)生了分叉。因為剛才我們創(chuàng)建了一個新分支,并切換過去進(jìn)行了一些工作,隨后又切換回 master 分支進(jìn)行了另外一些工作,上述兩次改動針對的是不同的分支:你可以在不同分支間不斷地來回切換和工作,并在時機(jī)成熟時將他們合并起來。
項目分叉歷史
使用 $ git log命令查看分叉歷史。它會輸出你的提交歷史、各個分支的指向以及項目的分支分叉情況:
$ git log --oneline --decorate --graph --all * c2b9e (HEAD, master) made other changes | * 87ab2 (testing) made a change |/ * f30ab add feature #32 - ability to add new formats to the * 34ac2 fixed bug #1328 - stack overflow under certain conditions * 98ca9 initial commit of my projectGit的分支實(shí)質(zhì)上僅包含所指對象校驗和(長度為40的SHA-1 值字符串)的文件,所以它的創(chuàng)建和銷毀都異常高效。因為創(chuàng)建一個新分支就相當(dāng)于往一個文件中寫入1個換行符和40個字符,因此十分迅速。
綜上,就是Git的分支管理相關(guān)的概念和模型,如有疑問歡迎文末留言。
參考:
《Git - 分支簡介》
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的Git初学札记(五)————Branch分支管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XML学习(一)————XML简介
- 下一篇: 图之遍历--广度优先遍历