Git初學札記(五) Branch分支管理

2021-08-21 10:06:48 字數 2729 閱讀 8847

正如之前的部落格中提到的,git區別於svn的乙個最明顯的功能就是分支管理功能。

那麼什麼是分支?分支又能為我們的開發帶來什麼翻天覆地的變化呢?(為了使部落格的內容更具權威性和專業性,以下部分內容摘自官方文件《git - 分支簡介》)。

分支,顧名思義,從主幹分離的枝幹。使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。

分支並不是git特有的功能特性,但是相比於其他的版本控制系統,git處理分支的方式可謂是難以置信的輕量,建立新分支這一操作幾乎能在瞬間完成,並且在不同分支之間的切換操作也是一樣便捷。與許多其他版本控制系統不同,git鼓勵在工作流程中頻繁地使用分支與合併(branch 和 merge)。

理解和精通這一特性,我們便會意識到git是如此的強大而又獨特,並且從此真正改變我們的開發方式。

建立分支的命令是git branch :

$ git branch testing
根據git的工作原理(在此不做討論,可以參見《起步 - git基礎》),上面這行命令會在當前所在的提交物件上建立乙個指標。

此時,兩個指向相同提交歷史的分支,而git又是如何知道當前在哪乙個分支上呢?其實,git中還存在乙個名為head的特殊指標。在git中,head指向當前所在的本地分支(將head想象為當前分支的別名)。$ git branch命令僅僅會建立乙個新分支,並不會自動切換到新分支中去。

可以使用$ git log 命令檢視各個分支當前所指物件。

$ 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

可以看到,當前master和testing分支都指向校驗和以 f30ab 開頭的提交物件。

更換到乙個已經存在的分支,需要使用$ git checkout 命令。

可以再次進行開發,並提交:

執行完提交後,head分支就會隨著提交操作自動向前移動,如上圖所示,testing 分支向前移動了,但是master分支卻沒有,它仍然指向執行 git checkout 時所指向的物件。

我們再次切換回 master 分支上:

checkout 時head隨之移動,這條命令完成了兩件事:第一是將head指向 master 分支,第二是將工作目錄恢復成master 分支所指向的快照內容。也就是說,你現在做修改的話,專案將始於乙個較舊的版本。本質上來講,這就是忽略 testing 分支所做的修改,以便向另乙個方向進行開發。

此時,如果我們不進行分支合併(merge操作),而是朝著另乙個方向進行了修改,那麼我們就會出現如下圖所示的分支結構:

可以看到,專案的提交歷史已經產生了分叉。因為剛才我們建立了乙個新分支,並切換過去進行了一些工作,隨後又切換回 master 分支進行了另外一些工作,上述兩次改動針對的是不同的分支:你可以在不同分支間不斷地來回切換和工作,並在時機成熟時將他們合併起來。

使用 $ 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 project

git的分支實質上僅包含所指物件校驗和(長度為40的sha-1 值字串)的檔案,所以它的建立和銷毀都異常高效。因為建立乙個新分支就相當於往乙個檔案中寫入1個換行符和40個字元,因此十分迅速。

參考:《git - 分支簡介》

Git系列6 分支 branch

很多時候我們需要給自己或者客戶用乙個穩定的版本庫,然後同時還在開發另外乙個公升級版.自然而然,我們會想到把這兩者分開處理,使用者使用穩定版,我們開發我們的開發版.不過 git 的做法卻不一樣,它把這兩者融合成了乙個檔案,使用不同的分支來管理.所以這一節我們來說說 git 中的 分支 branch.之...

Git初學札記(九) EGit檢出遠端分支

現在有這樣乙個使用場景 團隊中的其他開發者提交了乙個新的特性分支 如feature 1 要求我們一同開發,並將自己修改的 也全部提交到這個分支上去。那麼如何將這個分支檢出,並將本地檢出的分支與這個遠端分支相關聯從而使我們的 能夠push到這個分支上呢?對於引言中提到的問題解決辦法非常簡單,首先在本地...

Git五分鐘教程

使用git前,需要先建立乙個倉庫 repository 您可以使用乙個已經存在的目錄作為git倉庫或建立乙個空目錄。git initgit init newrepo從現在開始,我們將假設您在git倉庫根目錄下,除非另有說明。我們有乙個倉庫,但什麼也沒有,可以使用add命令新增檔案。git add f...