對于多分支的代碼庫,將代碼從一個(gè)分支轉(zhuǎn)移到另一個(gè)分支是常見需求聪黎。
這時(shí)分兩種情況:
你需要另一個(gè)分支的所有代碼變動(dòng)逝淹,那么就采用合并(git merge)。
你只需要部分代碼變動(dòng)(某幾個(gè)提交)婚陪,這時(shí)可以采用 Cherry pick。
Cherry pick直譯為撿櫻桃??频祝,它的功能是把已經(jīng)存在的commit進(jìn)行挑選泌参,然后重新提交。比較合適的一個(gè)場景是把A分支的某次或者多次的提交也提交到B分支上常空,使用方法
一沽一、轉(zhuǎn)移一個(gè)提交
先切換到 A 分支
$ git checkout A
找到這次提交
? $ git log
? commit f038d7ffb1685af7d4f870ad0b798670b6f760e8 (HEAD -> feature/0113_update)
? Author: qxj <qxj@qq.com>
? Date:? Thu Jan 14 15:24:54 2021 +0800
? ? ? feat: xxx
再切換到B分支
$ git checkout B
把 A 分支下的這次commit 重新提交到 B 分支下
$ git cherry-pick 'f038d7ffb1685af7d4f870ad0b798670b6f760e8'
當(dāng)執(zhí)行完 git cherry-pick以后,將會(huì)生成一個(gè)新的提交漓糙,這個(gè)新的提交的hash值和原來的不同铣缠,但標(biāo)志名稱一樣。
二、轉(zhuǎn)移多個(gè)提交
Cherry pick 支持一次轉(zhuǎn)移多個(gè)提交蝗蛙。
$ git cherry-pick <HashA> <HashB>
上面的命令將 A 和 B 兩個(gè)提交應(yīng)用到當(dāng)前分支蝇庭。這會(huì)在當(dāng)前分支生成兩個(gè)對應(yīng)的新提交。
如果想要轉(zhuǎn)移一系列的連續(xù)提交捡硅,可以使用下面的簡便語法哮内。
$ git cherry-pick A..B
上面的命令可以轉(zhuǎn)移從 A 到 B 的(**左開右閉,不包含A)**所有提交壮韭。它們必須按照正確的順序放置:提交 A 必須早于提交 B北发,否則命令將失敗,但不會(huì)報(bào)錯(cuò)喷屋。
如果要包含提交 A琳拨,可以使用下面的語法。
$ git cherry-pick A^..B