1.git cherry pick可以理解為”挑揀”提交,它會獲取某一個分支的單筆提交,並作為一個新的提交引入到你當前分支上。 當我們需要在本地合入其他分支的提交時,如果我們不想對整個分支進行合並,而是只想將某一次提交合入到本地當前分支上,那么就要使用git cherry-pick.
cherry-pick類似於一個定制化的merge,它可以把其它分支上的commit一個個摘下來,合並到當前分支。
2.比如我在develop分支完成了三個功能模塊:feature A,feature B,feature C, 首先通過git log可以看到最新的提交。
git cherry-pick的用法是:git cherry-pick commitID
但是如果我們要將100個commit要合並到master分支怎么做呢?
git一個區間操作方法。具體來講是這樣的:git cherry-pick commit1..commit100
注意:這是一個左開右閉的操作,也就是說,commit1不會被合並到master分支,而commit100則會。
3.更多用法
1)git cherry-pick -n:如果不想 git cherry-pick 自動進行提交,則加參數-n即可
2)git cherry-pick -e:如果想要在 git cherry-pick 后重新編輯提交信息,則使用 git cherry-pick -e 命令
3)git cherry-pick –continue:在cherry-pick的過程中,如果發生沖突,需要先解決沖突,通過git add .將文件標記為已解決,然后可以使用git cherry-pick --continue命令,繼續進行cherry-pick操作。
如果要中斷這次cherry-pick,則使用git cherry-pick --quit,這種情況下當前分支中未沖突的內容狀態將為modified,
如果要取消這次cherry-pick,則使用git cherry-pick --abort,這種情況下當前分支恢復到cherry-pick前的狀態,沒有改變。
4)git cherry-pick < branchname >:如果在git cherry-pick后加一個分支名,則表示將該分支頂端提交進cherry-pick
5. 常見問題
1)The previous cherry-pick is now empty, possibly due to conflict resolution.
在cherry-pick時出現沖突,解決沖突后本地分支中內容和cherry-pick之前相比沒有改變,因此當在以后的步驟中繼續git cherry-pick或執行其他命令時,由於此時還處於上次cherry-pick,都會提示該信息,表示可能是由於解決沖突造成上一次cherry-pick內容是空的。
解決方案:
執行git cherry-pick --abort取消上次操作。
執行git commit --allow-empty,表示允許空提交。
2)fatal: You are in the middle of a cherry-pick – cannot amend.
在cherry-pick時出現沖突,沒有解決沖突就執行git commit --amend命令,從而會提示該信息。
解決方案:
首先在git commit --amend之前解決沖突,並完成這次cherry-pick:
$ git add .
$ git cherry-pick --continue
