我們在完成乙個專案時,不可能是「單執行緒」開發的,很多時候任務是並行的,舉個栗子:專案 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 中的分支管理功能:
建立乙個長期分支用來開發 3.0 功能,假設這個分支的名字就叫 v3,我們在 v3 上新增新功能,並不斷測試,當 v3 穩定後,將 v3 合併到 master 分支上。
建立乙個特性分支用來修復 2.0 的 bug ,一旦 bug 修復成功,就將該分支合併到 master 上,一旦發現新 bug ,就立馬再建立分支進行修復,修復成功之後再合併。
以上兩個步驟同步進行,這在 svn 中簡直是不可想象的,因為 svn 的分支管理太 low,而 git 能夠讓我們做到隨心所欲的建立、合併和刪除分支。
我們可以通過git branch
命令來檢視當前倉庫有哪些分支,而我們處於哪乙個分支中,如下:
這裡顯示當前倉庫只有乙個 master 分支,這是 git 預設建立出來的,master 前面的*
表示我們當前處於這乙個分支中。
我們可以利用git branch 《分支名》
命令來建立乙個分支,然後利用git checkout 《分支名》
來切換分支,如下:
如果小夥伴覺得這樣太麻煩,可以通過git checkout -b 《分支名》
來一步到位,建立並切換分支,如下:
現在我切換到 fa 分支中,由於 fa 分支是從 master 分支中建立出來的,所以此時 fa 分支的內容和 master 分支的內容是一致的,然後我在 fa 分支中向 git01.txt 檔案新增一行內容並提交,此時 fa 分支中的 git01.txt 和 master 分支中 git01.txt 的內容就不相同了,具體操作如下:
現在我通過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
解決衝突
如下圖:
我們前面提到了在分支衍合時出現衝突的解決方案,其實普通的合併也有可能出衝突,出現衝突很正常,解決就是了,git merge 合併分支時如果出現衝突還是先重新編輯衝突檔案,編輯完成之後,再執行 git add 和 git commit 即可。
git 分支管理
一 遠端倉庫有master和dev分支 1.轉殖 git clone 這個git路徑是無效的,示例而已 2.檢視所有分支 git branch all 預設有了dev和master分支,所以會看到如下三個分支 master 本地主分支 origin master 遠端主分支 origin dev 遠...
git分支管理
1 遠端倉庫相關命令 檢出倉庫 git clone git 檢視遠端倉庫 git remote v 新增遠端倉庫 git remote add name url 刪除遠端倉庫 git remote rm name 拉取遠端倉庫 git pull remotename localbranchname ...
Git分支管理
1.檢視分支 檢視本地倉庫所有分支 git branch v1.8.0.local v1.8.1 v1.8.2 master 2.檢視本地和遠端倉庫所有分支 git branch a master remotes origin head origin master remotes origin v1...