Git 使用cherry-pick摘取提交

以前很少使用cherry-pick这个命令,今天研究了一下如何使用cherry-pick摘取提交,便记录一下以便后续查阅。初始git历史如下图所示。

cherry-pick-step-1.png

现在我们在master分支上开始测试cherry-pick这个提交点上,这个提交点上的commit id674d60f

cherry-pick 摘取一个提交点

git cherry-pick <commit-id>

比如说我们现在要摘取dev分支上的测试 cherry-pick v1这个提交点,这个提交点对应的commit idb0ad65b。那我们就可以运行如下命令。

git cherry-pick b0ad65b

在cherry-pick的过程中如果遇到冲突会给出如下图所示的提示。

meet-conflict.png

我们根据提示,首先手动解决冲突的文件,解决完毕以后运行git add . 暂存所有冲突的文件,然后运行git commit提交。

git add . 

git commit

然后会出现这样的弹出框让你输入commit信息,你可以使用默认的提交信息,或者更改提交信息。我们这里直接使用默认的提交信息即可。

cherry-pick-step2.png

保存以后测试 cherry-pick v1这个提交已经cherry-pick过来了,如下图所示

cherry-pick-step3.png

cherry-pick 摘取多个提交点

  • 方法1
git cherry-pick <start-commit-id> .. <end-commit-id>

摘取从 start-commit-id 到 end-commit-id之间的所有提交点,注意 这个区间是左开右闭(start-commit-id,end-commit-id]的。不包括start-commit-id,包括end-commit-id。

  • 方法2
git cherry-pick <start-commit-id>^ .. <end-commit-id>

摘取从 start-commit-id 到 end-commit-id之间的所有提交点,注意这个区间是都封闭的[start-commit-id,end-commit-id]的。包括start-commit-id和end-commit-id。

比如我们想摘取dev分支上的三个提交

测试 cherry-pick v3
测试 cherry-pick v2
测试 cherry-pick v1

测试 cherry-pick v1的commit id是b0ad65b
测试 cherry-pick v1的父节点的commit id是fb1d3f5
测试 cherry-pick v3的commit id是d6777d7

我们可以使用

 git cherry-pick fb1d3f5 .. d6777d7

或者

 git cherry-pick b0ad65b^ .. d6777d7

我们这里采用第2中方法。在cherry-pick的过程中遇到冲突会给出如下图所示的提示。
meet-conflict-2.png

解决步骤和上面一样,就不赘述了,解决完毕以后我们的git历史如下所示。

保存以后第一个commit已经cherry-pick过来了,如下图所示

cherry-pick-multiple-commit-step1.png

我们本来是想摘取多个提交点的,现在只有一个提交点被摘取过来了,怎么回事。

不要慌,这是时候运行继续摘取剩下的提交点。

git cherry-pick --continue 

继续cherry-pick剩下的提交点,最后结果如下图所示

cherry-pick-multiple-commit-step2.png

参考链接:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值