git cherry-pick 教程

推薦指數(shù)五顆星S骸C俨!!

對于多分支的代碼庫培漏,將代碼從一個(gè)分支轉(zhuǎn)移到另一個(gè)分支是常見需求溪厘。

這時(shí)分兩種情況。一種情況是牌柄,你需要另一個(gè)分支的所有代碼變動(dòng)畸悬,那么就采用合并(git merge)。另一種情況是珊佣,你只需要部分代碼變動(dòng)(某幾個(gè)提交)蹋宦,這時(shí)可以采用 Cherry pick。

img

一咒锻、基本用法

git cherry-pick命令的作用冷冗,就是將指定的提交(commit)應(yīng)用于其他分支。

$ git cherry-pick <commitHash>

上面命令就會(huì)將指定的提交commitHash惑艇,應(yīng)用于當(dāng)前分支蒿辙。這會(huì)在當(dāng)前分支產(chǎn)生一個(gè)新的提交,當(dāng)然它們的哈希值會(huì)不一樣敦捧。

舉例來說须板,代碼倉庫有masterfeature兩個(gè)分支。

    a - b - c - d   Master
         \
           e - f - g Feature

現(xiàn)在將提交f應(yīng)用到master分支兢卵。

# 切換到 master 分支
$ git checkout master

# Cherry pick 操作
$ git cherry-pick f

上面的操作完成以后习瑰,代碼庫就變成了下面的樣子。

    a - b - c - d - f   Master
         \
           e - f - g Feature

從上面可以看到秽荤,master分支的末尾增加了一個(gè)提交f甜奄。

git cherry-pick命令的參數(shù)柠横,不一定是提交的哈希值,分支名也是可以的课兄,表示轉(zhuǎn)移該分支的最新提交牍氛。

$ git cherry-pick feature

上面代碼表示將feature分支的最近一次提交,轉(zhuǎn)移到當(dāng)前分支烟阐。

二搬俊、轉(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 必須早于提交 B转锈,否則命令將失敗,但不會(huì)報(bào)錯(cuò)黑忱。

注意勒魔,使用上面的命令冠绢,提交 A 將不會(huì)包含在 Cherry pick 中常潮。如果要包含提交 A,可以使用下面的語法孵户。

$ git cherry-pick A^..B 

三岔留、配置項(xiàng)

git cherry-pick命令的常用配置項(xiàng)如下献联。

(1)-e何址,--edit

打開外部編輯器用爪,編輯提交信息胁镐。

(2)-n--no-commit

只更新工作區(qū)和暫存區(qū)颇玷,不產(chǎn)生新的提交亚隙。

(3)-x

在提交信息的末尾追加一行(cherry picked from commit ...)违崇,方便以后查到這個(gè)提交是如何產(chǎn)生的。

(4)-s渣淳,--signoff

在提交信息的末尾追加一行操作者的簽名入愧,表示是誰進(jìn)行了這個(gè)操作嗤谚。

(5)-m parent-number--mainline parent-number

如果原始提交是一個(gè)合并節(jié)點(diǎn)旁赊,來自于兩個(gè)分支的合并终畅,那么 Cherry pick 默認(rèn)將失敗竟闪,因?yàn)樗恢缿?yīng)該采用哪個(gè)分支的代碼變動(dòng)。

-m配置項(xiàng)告訴 Git妖爷,應(yīng)該采用哪個(gè)分支的變動(dòng)赠涮。它的參數(shù)parent-number是一個(gè)從1開始的整數(shù),代表原始提交的父分支編號(hào)斜友。

$ git cherry-pick -m 1 <commitHash>

上面命令表示垃它,Cherry pick 采用提交commitHash來自編號(hào)1的父分支的變動(dòng)国拇。

一般來說,1號(hào)父分支是接受變動(dòng)的分支(the branch being merged into),2號(hào)父分支是作為變動(dòng)來源的分支(the branch being merged from)缴挖。

四忆嗜、代碼沖突

如果操作過程中發(fā)生代碼沖突崎岂,Cherry pick 會(huì)停下來,讓用戶決定如何繼續(xù)操作绩卤。

(1)--continue

用戶解決代碼沖突后江醇,第一步將修改的文件重新加入暫存區(qū)(git add .)陶夜,第二步使用下面的命令,讓 Cherry pick 過程繼續(xù)執(zhí)行。

$ git cherry-pick --continue

(2)--abort

發(fā)生代碼沖突后捂贿,放棄合并胳嘲,回到操作前的樣子。

(3)--quit

發(fā)生代碼沖突后颜屠,退出 Cherry pick甫窟,但是不回到操作前的樣子。

五尔破、轉(zhuǎn)移到另一個(gè)代碼庫

Cherry pick 也支持轉(zhuǎn)移另一個(gè)代碼庫的提交浇衬,方法是先將該庫加為遠(yuǎn)程倉庫耘擂。

$ git remote add target git://gitUrl

上面命令添加了一個(gè)遠(yuǎn)程倉庫target

然后秩霍,將遠(yuǎn)程代碼抓取到本地前域。

$ git fetch target

上面命令將遠(yuǎn)程代碼倉庫抓取到本地韵吨。

接著归粉,檢查一下要從遠(yuǎn)程倉庫轉(zhuǎn)移的提交,獲取它的哈希值届榄。

$ git log target/master

最后倔喂,使用git cherry-pick命令轉(zhuǎn)移提交席噩。

$ git cherry-pick <commitHash>

(完)

感謝原作者(阮一峰)

http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悼枢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子莹妒,更是在濱河造成了極大的恐慌旨怠,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渴邦,死亡現(xiàn)場離奇詭異谋梭,居然都是意外死亡倦青,警方通過查閱死者的電腦和手機(jī)产镐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門癣亚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人街州,你說我怎么就攤上這事玻孟∈螋幔” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碰酝。 經(jīng)常有香客問我砰粹,道長,這世上最難降的妖魔是什么弄痹? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任肛真,我火速辦了婚禮蚓让,結(jié)果婚禮上讥珍,老公的妹妹穿的比我還像新娘衷佃。我一直安慰自己,他們只是感情好锄列,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布邻邮。 她就那樣靜靜地躺著筒严,像睡著了一般鸠补。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上规惰,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天歇万,我揣著相機(jī)與錄音贪磺,去河邊找鬼诅愚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刹前,可吹牛的內(nèi)容都是我干的喇喉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膏斤!你這毒婦竟也來了掸绞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敞映,沒想到半個(gè)月后振愿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年枪孩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔑舞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘹屯。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡州弟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拯杠,到底是詐尸還是另有隱情阴挣,我是刑警寧澤纺腊,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布揖膜,位于F島的核電站壹粟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洪添。R本人自食惡果不足惜雀费,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一盏袄、第九天 我趴在偏房一處隱蔽的房頂上張望辕羽。 院中可真熱鬧,春花似錦绰寞、人聲如沸酌毡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旷坦。三九已至佑稠,卻和暖如春舌胶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辆它。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工锰茉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留切心,地道東北人绽昏。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓全谤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親材原。 傳聞我的和親對象是個(gè)殘疾皇子季眷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容