git cherry-pick 摘櫻桃合併

git cherry-pick能夠選擇某一個分支中的一個或幾個commit(s)來進行操做。例如,假設咱們有個穩定版本的分支,叫v2.0,另外還有個開發版本的分支v3.0,咱們不能直接把兩個分支合併,這樣會致使穩定版本混亂,可是又想增長v3.0中的某個功能到v2.0中,這裏就可使用cherry-pick了。就是對已經存在的commit 進行 再次提交;git

1, 先經過git log 獲取想要合併的commit_id,記錄下來vim

commit df8960346dc803a5c1485551c5d109fd7dda6ae6
Author: efg
Date:   Mon Apr 23 18:48:31 2018 +0800

    測評

commit a6a31d169d8b39b4cc3bd1da6fa3184fdb19321c
Author: xwz
Date:   Mon Apr 23 18:37:34 2018 +0800

    空tag  重提交

commit 3a683f2787f011506ee11ce5cfe342f67f337054
Merge: 29cac5d 937d68b
Author: abc
Date:   Mon Apr 23 18:06:41 2018 +0800

    Merge branch 'master' into vanke-fixbug-20180423-1

commit 29cac5d01424816fa5b4a61a5c1941d9d94ea970
Author: xyz
Date:   Mon Apr 23 14:03:21 2018 +0800

    二維碼姓名不一致

2, 切換主分支;bash

3, 使用git cherry-pick命令將想要合併的分支合併到主分支;app

git cherry-pick <commit_id>

A. 若是順利,就會正常提交。結果:指針

Finished one cherry-pick.
# On branch old_cc
# Your branch is ahead of 'origin/old_cc' by 3 commits.


B. 若是在cherry-pick的過程當中出現了衝突code

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 df8960346dc803a5c1485551c5d109fd7dda6ae6

舉個例子:有一條主分支master,進行過兩次提交(m0和m1)。此時,新開了一個分支develop作開發,進行了三次提交(d0、d1和d2)。若是隻想將d2此次提交合併到主分支master,查了不少資料說應該用cherry-pick指令,因而開發

git checkout master
git cherry-pick d2的commit哈希碼

但是這時候,會產生一個衝突,須要用戶手動去編輯。此時只能解決衝突。沒法 cherry-pick的緣由是, d2 修改的文件,已經在 d1(or d0)被修改過了,因此 cherry-pick 並不知道如何刪除和增長對應的 lines,因此就衝突了。惟一的辦法就是解決衝突。hash

另外,cherry-pick 並非將指針移到d2,cherry-pick 更像 patch the changes,即便什麼衝突都沒有,commit hash 都是不同的。it


就跟普通的衝突同樣,手動解決ast


B.1 $ git status    # 看哪些文件出現衝突

both modified: app/models/user.rb

B.2 $ vim app/models/user.rb  # 手動解決它
B.3 $ git add app/models/user.rb

B.4 git commit -c <新的commit號碼>

相關文章
相關標籤/搜索