git cherry-pick 使用指南

git cherry-pick可以選擇某一個分支中的一個或幾個commit(s)來進行操作。例如,假設(shè)我們有個穩(wěn)定版本的分支,叫v2.0,另外還有個開發(fā)版本的分支v3.0,我們不能直接把兩個分支合并,這樣會導(dǎo)致穩(wěn)定版本混亂,但是又想增加一個v3.0中的功能到v2.0中,這里就可以使用cherry-pick了,其實也就是對已經(jīng)存在的commit 進行再次提交.


簡單用法:
git cherry-pick <commit id>
注意:當(dāng)執(zhí)行完 cherry-pick 以后,將會生成一個新的提交;這個新的提交的哈希值和原來的不同,但標(biāo)識名一樣;

例如:
$ git checkout v2.0分支
$ git cherry-pick 38361a55 # 這個 38361a55 號碼,位于v3.0分支中:

$ git log
commit 38361a55138140827b31b72f8bbfd88b3705d77a
Author: Justin Justin@xxx.com
Date: Sat Dec 10 00:11:44 2016 +0800

1. 如果順利,就會正常提交。結(jié)果:

Finished one cherry-pick.
On branch v2.0分支
Your branch is ahead of 'origin/old_cc' by 3 commits.

2. 如果在cherry-pick 的過程中出現(xiàn)了沖突

Automatic cherry-pick failed.
After resolving the conflicts,mark the corrected paths with 'git add <paths>' or 'git rm <paths>'and commit the result with:
git commit -c 15a2b6c61927e5aed6111de89ad9dafba939a90b
或者:
error: could not apply 0549563... dev
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

就跟普通的沖突一樣,手工解決:

2.1 $ git status # 看哪些文件出現(xiàn)沖突

both modified: app/models/MainActivity.java

**2.2 $ vim app/models/MainActivity.java # 手動解決它。 **

2.3 $ git add app/models/MainActivity.java

2.4 git commit -c <新的commit號碼>

2.5 再次cherry-pick剩余commit

若提示:

error: a cherry-pick or revert is already in progress
hint: try "git cherry-pick (--continue | --quit | --abort)"
fatal: cherry-pick failed

則執(zhí)行對應(yīng)操作:

git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort


命令集合:

  • git cherry-pick <commit id>:單獨合并一個提交
  • git cherry-pick -x <commit id>:同上,不同點:保留原提交者信息。
    Git從1.7.2版本開始支持批量cherry-pick,就是一次可以cherry-pick一個區(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>之間(左開右閉,不包含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>在時間上必須早于<end-commit-id>
注:以上合并,需要手動push代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,866評論 1 26
  • 未知宇宙地球中國赤峰,屋內(nèi)溫和,窗簾透著黯淡的光線,也許陰天,床,腳下是書櫥對著沙發(fā),床側(cè)長矮櫥坐著魚缸顯示器和機...
    馬曉均閱讀 215評論 0 0
  • 董事長(股東之一)A:上午十點,來到公司,看到大廳坐滿的幾十個員工,確毫無生息的感覺,就納悶了,為什么我每天忙的焦...
    小蛀蟲2017閱讀 1,170評論 0 9
  • 爸爸,媽媽: 你們好! 時間過的真快,轉(zhuǎn)眼間,我面臨畢業(yè)了。目前,各科考試已經(jīng)結(jié)束,我的成績還不錯,沒有辜負(fù)爸爸媽...
    暴娜閱讀 320評論 0 1
  • 人都是趨利避害的動物。 今天午間休息時間,我像往常一樣準(zhǔn)備回宿舍吃個飯,休息休息。誰知經(jīng)過主任辦公室,就被叫了去。...
    子姝閱讀 511評論 0 1

友情鏈接更多精彩內(nèi)容