在咱们使用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