git cherry-pick命令

一、背景

        对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求,这时分两种情况:

        (1)你需要另一个分支的所有代码变动,就采用合并(git merge);

        (2)你只需要部分代码变动(某几个提交),这时可以采用git cherry-pick;

二、基本用法

2.1 命令的格式

        格式如下,其中的commitHash在通过git log查看代码提交log时会有显示;

$ git cherry-pick <commitHash>

2.2 命令的作用

2.2.1 作用

        上面命令就会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样;

2.2.2 分析解释

        (1)举例来说,代码仓库有masterfeature两个分支;

    a - b - c - d   Master
         \
           e - f - g Feature

         (2)现在将提交f应用到master分支,命令如下:

# 切换到 master 分支
$ git checkout master

# Cherry pick 操作
$ git cherry-pick f

        (3)上面的操作完成以后,代码库就变成了下面的样子;

    a - b - c - d - f   Master
         \
           e - f - g Feature

        (4)从上面可以看到,master分支的末尾增加了一个提交f;

        (5)补充:git cherry-pick命令的参数也可以是分支名,表示转移该分支的最新提交;

$ git cherry-pick feature

        上面代码表示将feature分支的最近一次提交,转移到当前分支;

三、转移多个提交

        Cherry pick 支持一次转移多个提交,有如下两种:

        (1)将A和B两个提交(commit)应用到当前分支(当前参数不止可以接两个),这会在当前分支上生成两个对应的新提交,代码如下:

$ git cherry-pick <HashA> <HashB>

        (2)转移一系列的连续提交,可以使用下面的简便语:

$ git cherry-pick A..B 

        上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错;

        注意: 使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。

$ git cherry-pick A^..B 

四、参数配置

        git cherry-pick 命令的常用配置项如下:

        (1)-e, --edit

                打开外部编辑器,编辑提交信息;

        (2)-n, --no-commit

                只更新工作区和暂存区,不产生新的提交;

        (3)-x

                在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的;

        (4)-s, --signoff

                在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作;

        (5)-m parent-number, --mainline parent-number

                如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动;

                -m 配置项告诉 Git,应该采用哪个分支的变动。它的参数 parent-number 是一个从1开始的整数,代表原始提交的父分支编号;

$ git cherry-pick -m 1 <commitHash>

        上面命令表示,Cherry pick 采用提交commitHash来自编号1的父分支的变动。

        一般来说,1号父分支是接受变动的分支(the branch being merged into),2号父分支是作为变动来源的分支(the branch being merged from)。

五、转移到另一个代码库

        Cherry pick 也支持转移另一个代码库的提交,方法是先将该库加为远程仓库;

        (1)添加一个远程仓库target,命令如下:

$ git remote add target git://gitUrl

        (2)将远程代码抓取到本地,命令如下:

$ git fetch target

        (3)检查一下要从远程仓库转移的提交,获取它的哈希值,命令如下:

$ git log target/master

        (4)使用 git cherry-pick 命令转移提交,命令如下:

$ git cherry-pick <commitHash>

参考文献:

        参考:git cherry-pick 教程 - 阮一峰的网络日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值