Git分支管理

Svn中也有分支管理,可是很low,Git的分支管理很是強大,本文先不去說分支管理內部到底怎麼作的,咱們先來看看Git中最基本的分支管理操做。 git

本文是Git系列的第四篇,瞭解前面的文章有助於更好的理解本文:編輯器


1.Git概述
2.Git基本操做
3.Git中的各類後悔藥測試


分支的必要性

小夥伴們都知道,咱們在完成一個項目時,不多是「單線程」開發的,不少時候任務是並行的,舉個栗子:項目2.0版本上線了,如今要着手開發3.0版本,同時2.0版本可能還有一些bug須要修復,這些bug修復以後咱們可能還會發2.1,2.2,2.3這些版本,咱們不可能等全部bug都修復完了再去開發3.0版本,修復2.0的bug和開發3.0的新功能是兩個並行的任務,這個時候咱們3.0的功能開發直接在master分支上進行確定不合適,咱們要保證有一個穩定,能夠隨時發版本的分支存在(通常狀況下這個角色由master分支來扮演),此時咱們就能夠靈活的使用Git中的分支管理功能: spa

1.建立一個長期分支用來開發3.0功能,假設這個分支的名字就叫v3,咱們在v3上添加新功能,並不斷測試,當v3穩定後,將v3合併到master分支上。
2.建立一個特性分支用來修復2.0的bug,一旦bug修復成功,就將該分支合併到master上,一旦發現新bug,就立馬再建立分支進行修復,修復成功以後再合併。 線程

以上兩個步驟同步進行,這在Svn中簡直是不可想象的,由於Svn的分支管理太low,而Git可以讓咱們作到爲所欲爲的建立、合併和刪除分支。指針

查看分支

咱們能夠經過git branch命令來查看當前倉庫有哪些分支,而咱們處於哪個分支中,以下: code

圖片描述

這裏顯示當前倉庫只有一個master分支,這是git默認建立出來的,master前面的*表示咱們當前處於這一個分支中。圖片

分支建立和切換

咱們能夠利用git branch <分支名>命令來建立一個分支,而後利用git checkout <分支名>來切換分支,以下:
圖片描述開發

若是小夥伴以爲這樣太麻煩,能夠經過git checkout -b <分支名>來一步到位,建立並切換分支,以下: get

圖片描述

也能夠經過git checkout -命令來切換回上一個分支,以下:

圖片描述

分支合併

如今我切換到fa分支中,因爲fa分支是從master分支中建立出來的,因此此時fa分支的內容和master分支的內容是一致的,而後我在fa分支中向git01.txt文件添加一行內容並提交,此時fa分支中的git01.txt和master分支中git01.txt的內容就不相同了,具體操做以下:

圖片描述

上圖展現了此時master分支和fa分支的不一樣,如今我經過git merge --no-ff <分支名>命令將fa分支合併到master分支上。其中--no-ff表示強行關閉fast-forward方式,fast-forward方式表示當條件容許時,git直接把HEAD指針指向合併分支的頭,完成合並,這種方式合併速度快,可是在整個過程當中沒有建立commit,因此若是當咱們刪除掉這個分支時就再也找不回來了,所以在這裏咱們將之關閉。

想要合併分支,咱們先切換到master分支上,而後執行git merge --no-ff fa命令便可完成分支合併,以下圖:

圖片描述

合併成功後,咱們看到master分支上的git01.txt上已經有了fa分支中的內容了。

以圖表方式查看分支

咱們能夠經過git log --graph命令來直觀的查看分支的建立和合並等操做,以下圖:

圖片描述

分支衍合

所謂的分支衍合其實也是分支合併的一種方式,下面咱們就來看看這個分支衍合究竟是什麼樣的。如今個人master分支的內容和fa分支的內容是保持一致的,fa是從master中建立出來的,以下圖:

圖片描述

如今我向fa和master中各自作一次提交,以下圖:

圖片描述

此時咱們執行以下兩條命令將兩個分支合併:

$ git checkout fa
$ git rebase master

rebase命令在執行的過程當中會首先把fa中的每一個commit取消,而且將之保存爲臨時patch,再將fa分支更新爲最新的master分支,而後再把那些臨時的patch應用到fa上,此時fa分支將指向新建立的commit上,那些老的commit將會被丟棄,這些被丟棄的commit在執行git gc命令時會被刪除。合併後的分支以下圖:

圖片描述

上面的git rebase master命令在執行的過程當中有可能會發生衝突,發生衝突時咱們有兩種方案,一種直接退回到以前的狀態,另外一種就是解決衝突繼續提交。

退回到以前的狀態

咱們能夠經過以下命令來回到以前的狀態:

$ git rebase --abort

解決衝突

不過大多數狀況下咱們都是要解決衝突的,解決以後繼續提交。此時咱們用編輯器打開衝突的文件,看到的內容多是這樣的:

圖片描述

======上面的是HEAD中的內容,下面的是要合併的內容,根據本身的需求編輯文件,編輯完成以後,經過以下兩條命令繼續完成合並:

$ git add git01.txt
$ git rebase --continue

以下圖:

圖片描述

衝突解決

咱們前面提到了在分支衍合時出現衝突的解決方案,其實普通的合併也有可能出衝突,出現衝突很正常,解決就是了,git merge合併分支時若是出現衝突仍是先從新編輯衝突文件,編輯完成以後,再執行git add 和git commit便可。

好了,分支管理咱們就先說這麼多,有問題歡迎留言討論。

參考資料:

1.《GitHub入門與實踐》
2.《Pro Git》

更多JavaEE和Git資料請關注公衆號:

圖片描述

相關文章
相關標籤/搜索