你必须要知道的git命令cherry-pick

logo@2x.png

在工作中你有没有遇到过以下情况:

  1. 从master新拉的分支,由于需求量大工期长,期间不知道有多少个新分支合入到master了,当自己要上线的时候要重新合入master时,发现出现了冲突,并且解决起来又很麻烦
  2. 不同需求上线时间不同时,分支切着切着就乱了,把本部署a分支的需求却在a分支上开发了,此时改怎么办呢?

针对以上两种情况,不知道大家有没有什么好的办法呢?在不知道git cherry-pick的时候,我可能真的是需要重新开发吧,真是费时又费力?。
可是自从知道了git cherry-pick,简直是遇上了救星?,再也不用苦恼了

cherry-pick的作用

将指定的commit提交到其他分支。

现在有两个分支master,branchA

  • master commit记录

image.png

  • branchA commit记录

image.png
此时如果想要把branchA的最后一次commit合入到master时,我们常用的方法有:

  1. 使用 git merge
git checkout master


git merge barnchA

image.png
2. 使用 git rebase

git checkout master


git rebase barnchA

image.png
还有一种不常用的是git cherry-pick

git checkout master


// 069dd85是在branchA分支的提交的commit id
git cherry-pick 069dd85

image.png

虽然以上方法都可以将branchA的commit合入到master,但是还会有不同:
在上面的简单的例子中git rebasegit merge是没有区别的(实际在工作中这两者是不一样的,暂不叙述),产生的commitId和原分支的是一样的,而git cherry-pick会在提交到新的分支时,commitId会改变,与原分支不一样。

用法

如上实例我们已经知道了如果转移一个提交要怎么用

转移一个提交

git cherry-pick A

转移多个提交

// 转移A,B
git cherry-pick A B

// 不包含A的连续转移
git cherry-pick A..B

// 包含A连续转移
git cherry-pick A^..B

转移某个分支的提交

// 转移某个分支的最新提交
git cherry-pick feature

其他一些转移(git cherry-pick)

image.png

冲突

应用cherry-pick也会遇见冲突,当遇见冲突时,cherry-pick会停下来,需要让我们来决定如何继续操作。

  1. --continue:解决冲突后,将修改的文件重新加入暂存区git add .,然后使用命令,以此来继续
git cherry-pick --continue
  1. --skip:跳过当前的提交,继续进行队列中其余的命令。
git cherry-pick --skip
  1. --quit:发生代码冲突后,退出cherry-pick,但是不回到操作前的样子
git cherry-pick --quit
  1. --abort:当需要放弃合并是,可以使用如下命令回退到操作前的样子
git cherry-pick --abort

结束

以上就是cherry-pick的常用方法,别看很简单,实际上已经够用了,并且非常非常有用,快快用起来吧~

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYMBsCLm' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片