亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

關(guān)于git-Git 分支管理和沖突解決

Original 2016-11-10 09:30:00 593
abstract:創(chuàng)建分支  git branch  沒有參數(shù),顯示本地版本庫中所有的本地分支名稱?! ‘?dāng)前檢出分支的前面會有星號。  git branch newname  在當(dāng)前檢出分支上新建分支,名叫newname?! it checkout newname  檢出分支,即切換到名叫newname的分支?! it checkout –b newname master  這個命令將上面兩個命令合并:在mas

創(chuàng)建分支

  git branch

  沒有參數(shù),顯示本地版本庫中所有的本地分支名稱。

  當(dāng)前檢出分支的前面會有星號。

  git branch newname

  在當(dāng)前檢出分支上新建分支,名叫newname。

  git checkout newname

  檢出分支,即切換到名叫newname的分支。

  git checkout –b newname master

  這個命令將上面兩個命令合并:在master分支上創(chuàng)建分支newname分支并檢出到該分支

合并分支間的修改 Merge

  合并操作將兩條或多條分支合并到一起,實(shí)際上有好幾種分支合并方法,下面介紹主要的三種

  1.直接合并(straight merge):

  把兩條分支上的歷史軌跡合并,交匯到一起。

  比如要把dev分支上的所有東東合并到master分支:

  首先先到master分支:git checkout maste

  然后把dev給合并過來:git merge dev

  注意沒參數(shù)的情況下merge是fast-forward的,即Git將master分支的指針直接移到dev的最前方。

  換句話說,如果順著一個分支走下去可以到達(dá)另一個分支的話,那么Git在合并兩者時,只會簡單移動指針,所以這種合并成為快進(jìn)式(Fast-forward)。

  2.壓合合并(squashed commits):

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

  把dev分支上的所有提交壓合成主分支上的一個提交,即壓合提交:

  git checkout master

  git merge --squash dev

  此時,dev上的所有提交已經(jīng)合并到當(dāng)前工作區(qū)并暫存,但還沒有作為一個提交,可以像其他提交一樣,把這個改動提交到版本庫中:

  git commit –m “something from dev”

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

  揀選另一條分支上的某個提交條目的改動帶到當(dāng)前分支上。

  每一次提交都會產(chǎn)生一個全局唯一的提交名稱,利用這個名稱就可以進(jìn)行揀選提交。

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

  把它合并到master中:

  git checkout master

  git cherry-pick 321d76f

  要揀選多個提交,可以給git cherry-pick命令傳遞-n選項(xiàng),比如:

  git cherry-pick –n 321d76f

  這樣在揀選了這個改動之后,進(jìn)行暫存而不立即提交,接著可以進(jìn)行下一個揀選操作,一旦揀選完需要的各個提交,就可以一并提交。

沖突處理

  當(dāng)兩條分支對同一個文件的同一個文本塊進(jìn)行了不同的修改,并試圖合并時,Git不能自動合并的,稱之為沖突(conflict)。解決沖突需要人工處理。

  比如當(dāng)前在master分支,想把dev分支merge過來,結(jié)果產(chǎn)生了一個沖突,打開文件內(nèi)容可以看到這么一個沖突:

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

  <<<<<<<標(biāo)記沖突開始,后面跟的是當(dāng)前分支中的內(nèi)容。

  HEAD指向當(dāng)前分支末梢的提交。

  =======之后,>>>>>>>之前是要merge過來的另一條分支上的代碼。

  >>>>>>>之后的dev是該分支的名字。

  對于簡單的合并,手工編輯,然后去掉這些標(biāo)記,最后像往常的提交一樣先add再commit即可。

刪除分支

  有些分支沒有必要長期保存,比如分支中的代碼已經(jīng)打了標(biāo)簽并已發(fā)布,或者實(shí)驗(yàn)分支已經(jīng)成功完成工作或中途廢棄等等。 

  注意:打了標(biāo)簽的分支,Git在刪除該分支時,從版本樹起始到此標(biāo)簽間的全部歷史軌跡均會保留,此時刪除分支操作只是刪除分支本身的名稱,因此可以說該分支沒有必要長期保存。

  而在其他版本控制工具中,刪除分支通常意味著刪除分支上的所有歷史軌跡,所以不能因?yàn)榇蛄藰?biāo)簽就認(rèn)為其沒有必要保存。

  刪除一個分支dev2:

  git branch –d dev2

  注意不能刪除當(dāng)前所在分支,需要轉(zhuǎn)到別的分支上。

  如果要刪除的分支已經(jīng)成功合并到當(dāng)前分支,刪除分支的操作會直接成功。

  如果要刪除的分支沒有合并到當(dāng)前所在分支,則會出現(xiàn)提示,如果確定無須合并而要直接刪除,則執(zhí)行命令:

  git branch –D dev2

  進(jìn)行強(qiáng)刪。

分支重命名

  重命名分支:

  git branch –m oldname newname

  -m不會覆蓋已有分支名稱,即如果名為newname的分支已經(jīng)存在,則會提示已經(jīng)存在了。

  如果改成-M就可以覆蓋已有分支名稱了,即會強(qiáng)制覆蓋名為newname的分支,這種操作要謹(jǐn)慎。

Release Notes

Popular Entries