介紹
git cherry-pick 可以選擇某一個(gè)分支中的一個(gè)或幾個(gè)commit(s)來(lái)進(jìn)行操作。例如,假設(shè)我們有個(gè)穩(wěn)定版本的分支,叫prd娇钱,另外還有個(gè)開(kāi)發(fā)版本的分支dev伤柄,我們不能直接把兩個(gè)分支合并,這樣會(huì)導(dǎo)致穩(wěn)定版本混亂文搂,但是又想增加一個(gè)dev中的功能到prd中适刀,這里就可以使用cherry-pick了,其實(shí)也就是對(duì)已經(jīng)存在的commit 進(jìn)行再次提交。
這個(gè)流程也適用于hotfix流程煤蹭, 比如在prd分支上提交個(gè)bugfix笔喉,需要提交到dev分支。
用法
git cherry-pick <commit id>
注意:當(dāng)執(zhí)行完 cherry-pick 以后硝皂,將會(huì)生成一個(gè)新的提交常挚;這個(gè)新的提交的哈希值和原來(lái)的不同,但標(biāo)識(shí)名一樣稽物;
示例
把prd上的某個(gè)commit合并到dev奄毡。
- 找到某次提交到prd分支的的commit id - 29259ee, 執(zhí)行如下命令
$ git checkout dev
$ git cherry-pick 29259ee ## 這個(gè) 29259ee贝或,位于prd分支中
- 接下來(lái)正常commit, 如果有沖突就手工解決吼过。
若提示:
error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed
則執(zhí)行對(duì)應(yīng)操作:
git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort
命令集合
git cherry-pick <commit id>:單獨(dú)合并一個(gè)提交
git cherry-pick -x <commit id>:同上,不同點(diǎn):保留原提交者信息咪奖。
Git從1.7.2版本開(kāi)始支持批量cherry-pick那先,就是一次可以cherry-pick一個(gè)區(qū)間的commit。
git cherry-pick <start-commit-id>..<end-commit-id>
git cherry-pick <start-commit-id>^..<end-commit-id>
前者表示把<start-commit-id>到<end-commit-id>之間(左開(kāi)右閉赡艰,不包含start-commit-id)的提交cherry-pick到當(dāng)前分支;
后者有"^"標(biāo)志的表示把<start-commit-id>到<end-commit-id>之間(閉區(qū)間斤葱,包含start-commit-id)的提交cherry-pick到當(dāng)前分支慷垮。
其中,<start-commit-id>到<end-commit-id>只需要commit-id的前6位即可揍堕,并且<start-commit-id>在時(shí)間上必須早于<end-commit-id>
注:以上合并料身,需要手動(dòng)push代碼。