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号码>

相关文章
相关标签/搜索