Git 分支管理和衝突解決

建立分支

  • git branch 沒有參數,顯示本地版本庫中全部的本地分支名稱。 當前檢出分支的前面會有星號。html

  • git branch newname 在當前檢出分支上新建分支,名叫newname。git

  • git checkout newname 檢出分支,即切換到名叫newname的分支。工具

  • git checkout –b newname master 這個命令將上面兩個命令合併:在master分支上建立分支newname分支並檢出到該分支。版本控制

合併分支間的修改 Merge

合併操做將兩條或多條分支合併到一塊兒,實際上有好幾種分支合併方法,下面介紹主要的三種:指針

1.直接合並(straight merge):

把兩條分支上的歷史軌跡合併,交匯到一塊兒。code

好比要把dev分支上的全部東東合併到master分支:htm

首先先到master分支:git checkout masterblog

而後把dev給合併過來:git merge devget

注意沒參數的狀況下merge是fast-forward的,即Git將master分支的指針直接移到dev的最前方。 換句話說,若是順着一個分支走下去能夠到達另外一個分支的話,那麼Git在合併二者時,只會簡單移動指針,因此這種合併成爲快進式(Fast-forward)。it

2.壓合合並(squashed commits):

將一條分支上的若干個提交條目壓合成一個提交條目,提交到另外一條分支的末梢。

把dev分支上的全部提交壓合成主分支上的一個提交,即壓合提交: git checkout master

git merge --squash dev

此時,dev上的全部提交已經合併到當前工做區並暫存,但尚未做爲一個提交,能夠像其餘提交同樣,把這個改動提交到版本庫中:

git commit –m 「something from dev」

3.揀選合併(cherry-picking):

揀選另外一條分支上的某個提交條目的改動帶到當前分支上。

每一次提交都會產生一個全局惟一的提交名稱,利用這個名稱就能夠進行揀選提交。

好比在dev上的某個提交叫:321d76f

把它合併到master中:

git checkout master git cherry-pick 321d76f

要揀選多個提交,能夠給git cherry-pick命令傳遞-n選項,好比:

git cherry-pick –n 321d76f

這樣在揀選了這個改動以後,進行暫存而不當即提交,接着能夠進行下一個揀選操做,一旦揀選完須要的各個提交,就能夠一併提交。

衝突處理

當兩條分支對同一個文件的同一個文本塊進行了不一樣的修改,並試圖合併時,Git不能自動合併的,稱之爲衝突(conflict)。解決衝突須要人工處理。

好比當前在master分支,想把dev分支merge過來,結果產生了一個衝突,打開文件內容能夠看到這麼一個衝突:

<<<<<<< HEAD
test in master
=======
test in dev
>>>>>>> dev

<<<<<<<標記衝突開始,後面跟的是當前分支中的內容。 HEAD指向當前分支末梢的提交。 =======以後,>>>>>>>以前是要merge過來的另外一條分支上的代碼。 >>>>>>>以後的dev是該分支的名字。

對於簡單的合併,手工編輯,而後去掉這些標記,最後像往常的提交同樣先add再commit便可。

刪除分支

有些分支沒有必要長期保存,好比分支中的代碼已經打了標籤並已發佈,或者實驗分支已經成功完成工做或中途廢棄等等。

注意:打了標籤的分支,Git在刪除該分支時,從版本樹起始到此標籤間的所有歷史軌跡均會保留,此時刪除分支操做只是刪除分支自己的名稱,所以能夠說該分支沒有必要長期保存。 而在其餘版本控制工具中,刪除分支一般意味着刪除分支上的全部歷史軌跡,因此不能由於打了標籤就認爲其沒有必要保存。

刪除一個分支dev2: git branch –d dev2

注意不能刪除當前所在分支,須要轉到別的分支上。

若是要刪除的分支已經成功合併到當前分支,刪除分支的操做會直接成功。

若是要刪除的分支沒有合併到當前所在分支,則會出現提示,若是肯定無須合併而要直接刪除,則執行命令:

git branch –D dev2 進行強刪。

分支重命名

重命名分支:

git branch –m oldname newname

-m不會覆蓋已有分支名稱,即若是名爲newname的分支已經存在,則會提示已經存在了。

若是改爲-M就能夠覆蓋已有分支名稱了,即會強制覆蓋名爲newname的分支,這種操做要謹慎。

參考資料

相關文章
相關標籤/搜索