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

前言

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

git cherry-pick的作用就如它的名字一样,精心挑选。我们可以精心挑选其他分支上的 commit 合并到当前的分支上来。

原理

git cherry-pick 可以把其他分支的某个commit应用到当前分支,并且自动生成一个新的 commit 进行提交,因此这两次commit的哈希值是不一样的,属于不同的commit。

基本用法

单个commit合并

git cherry-pick commit-hash/branch-name

如果使用的是哈希值,则会把对应的commit合并过来,如果是分支名,则会把对应分支的最新一次commit合并过来。

多个commit合并

# 1、 分散的commit
git cherry-pick commit-hash1 commit-hash2

# 2、连续的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 的先后顺序来处理,否则会有意想不到的问题。

如何处理冲突

代码合并不可避免的就是会遇到代码冲突了,git merge会遇到冲突,同样的git cherry-pick也会遇到代码冲突,那么遇到代码冲突的时候,该如何处理呢?

遇到冲突的时候,Git会给出报错信息,并停下来,要求用户解決 conflict 的问题。Git会把所有冲突的文件列在Unmerged paths的地方,可以通过git status查看。

此时我们有以下处理方案:

解决冲突
修改冲突的地方,并通过命令git add .把文件重新加入暂存区。
继续合并,git cherry-pick --continue
回退所有修改:git cherry-pick --abort,此时会回到操作前的样子
单纯退出cherry-pick:git cherry-pick --quit,此时不会回到操作前的状态

常用配置项

-e:修改提交信息,如果不修改,则使用合并过来的commit的提交信息
-x:标记来源commit,会在提交信息里标记来源的commit哈希,方便以后追查。
-n:只修改工作区和暂存区的代码,而不产生新的commit。这时候可以自己提交或者做其他修改后提交

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值