Git 分支管理和衝突解決
git branch
沒有參數,顯示本地版本庫中所有的本地分支名稱。
當前檢出分支的前面會有星號。
git branch newname
在當前檢出分支上新建分支,名叫newname。
git checkout newname
檢出分支,即切換到名叫newname的分支。
git checkout –b newname master
這個命令將上面兩個命令合併:在master分支上創建分支newname分支並檢出到該分支。
合併分支間的修改 Merge合併操作將兩條或多條分支合併到一起,實際上有好幾種分支合併方法,下面介紹主要的三種:
1.直接合併(straight merge):
把兩條分支上的歷史軌跡合併,交匯到一起。
比如要把dev分支上的所有東東合併到master分支:
首先先到master分支:git checkout master
然後把dev給合併過來:git merge dev
注意沒參數的情況下merge是fast-forward的,即Git將master分支的指針直接移到dev的最前方。
換句話說,如果順著一個分支走下去可以到達另一個分支的話,那麼Git在合併兩者時,只會簡單移動指針,所以這種合併成為快進式(Fast-forward)。
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過來,結果產生了一個衝突,打開文件內容可以看到這麼一個衝突:
<<<<<<< HEADtest 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的分支,這種操作要謹慎。
參考資料《版本控制之道——使用Git》(Pragmatic Version Control Using Git)
Git分支管理策略:http://www.ruanyifeng.com/blog/2012/07/git.html
Git Reference: http://gitref.org/
推薦閱讀:
※情緒管理的名言
※好好說話| 如何回答領導問你:最近怎麼樣?
※女生宿舍封閉管理的措施可行性如何,能否有效保護青少年女學生?
※越權管理的危害
※餐飲經理如何做好日常管理