git之cherry-pick


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM