在咱們使用Git進行平常開發的過程當中,經常須要進行的操做就是代碼合併了。常見的操作命令是 git merge branch-name
,這個命令會合並的是整個分支的commit
,然而有時候咱們須要的多是僅僅某一個 commit
或者某幾個commit
,這時候就須要用到git cherry-pick
了。git
git cherry-pick
的做用就如它的名字同樣,精心挑選。咱們能夠精心挑選其餘分支上的 commit
合併到當前的分支上來。shell
git cherry-pick
能夠把其餘分支的某個commit
應用到當前分支,而且自動生成一個新的 commit
進行提交,所以這兩次commit
的哈希值是不同的,屬於不一樣的commit
。segmentfault
單個commit
合併ui
git cherry-pick commit-hash/branch-name
若是使用的是哈希值,則會把對應的commit
合併過來,若是是分支名,則會把對應分支的最新一次commit
合併過來。spa
多個commit
合併code
# 一、 分散的commit git cherry-pick commit-hash1 commit-hash2 # 二、連續的commit # Git 1.7.2 版本之後,新增了支持批量cherry-pick # 能夠將一個連續的時間序列內的連續commit,進行cherry-pick操做。 # 合併(start,end]之間的提交,不包含start git cherry-pick start-commit-hash..end-commit-hash # 合併[start,end]之間的提交,包含start git cherry-pick start-commit-hash^..end-commit-hash
注意
不管是對單個 commit 進行 cherry-pick ,仍是批量處理,注意必定要根據時間線,依照 commit 的前後順序來處理,不然會有意想不到的問題。blog
代碼合併不可避免的就是會遇到代碼衝突了,git merge
會遇到衝突,一樣的git cherry-pick
也會遇到代碼衝突,那麼遇到代碼衝突的時候,該如何處理呢?圖片
遇到衝突的時候,Git會給出報錯信息,並停下來,要求用戶解決 conflict 的問題。Git會把全部衝突的文件列在Unmerged paths
的地方,能夠經過git status
查看,以下圖。
此時咱們有如下處理方案:開發
解決衝突rem
git add .
把文件從新加入暫存區。git cherry-pick --continue
git cherry-pick --abort
,此時會回到操做前的樣子cherry-pick
:git cherry-pick --quit
,此時不會回到操做前的狀態-e:修改提交信息,若是不修改,則使用合併過來的commit的提交信息 -x:標記來源commit,會在提交信息裏標記來源的commit哈希,方便之後追查。 -n:只修改工做區和暫存區的代碼,而不產生新的commit。這時候能夠本身提交或者作其餘修改後提交
Enjoy it !
轉載請註明做者和文章出處
做者: X先生
http://www.javashuo.com/article/p-sldbzkte-mh.html