git cherry-pick:挑选指定commit来合并

前言

在咱们使用Git进行平常开发的过程当中,经常须要进行的操做就是代码合并了。常见的操作命令是 git merge branch-name,这个命令会合并的是整个分支的commit,然而有时候咱们须要的多是仅仅某一个 commit或者某几个commit,这时候就须要用到git cherry-pick了。git

git cherry-pick的做用就如它的名字同样,精心挑选。咱们能够精心挑选其余分支上的 commit 合并到当前的分支上来。shell

原理

git cherry-pick 能够把其余分支的某个commit应用到当前分支,而且自动生成一个新的 commit 进行提交,所以这两次commit的哈希值是不同的,属于不一样的commitsegmentfault

基本用法

单个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-pickgit cherry-pick --quit,此时不会回到操做前的状态

经常使用配置项

-e:修改提交信息,若是不修改,则使用合并过来的commit的提交信息
-x:标记来源commit,会在提交信息里标记来源的commit哈希,方便之后追查。
-n:只修改工做区和暂存区的代码,而不产生新的commit。这时候能够本身提交或者作其余修改后提交

Enjoy it !

版权声明

转载请注明做者和文章出处
做者: X先生
http://www.noobyard.com/article/p-ygxhbfbf-mh.html