你必须要知道的git命令cherry-pick
在工作中你有没有遇到过以下情况:
- 从master新拉的分支,由于需求量大工期长,期间不知道有多少个新分支合入到master了,当自己要上线的时候要重新合入master时,发现出现了冲突,并且解决起来又很麻烦
- 不同需求上线时间不同时,分支切着切着就乱了,把本部署a分支的需求却在a分支上开发了,此时改怎么办呢?
针对以上两种情况,不知道大家有没有什么好的办法呢?在不知道git cherry-pick
的时候,我可能真的是需要重新开发吧,真是费时又费力😭。
可是自从知道了git cherry-pick
,简直是遇上了救星😁,再也不用苦恼了
cherry-pick的作用
将指定的commit提交到其他分支。
现在有两个分支master,branchA
- master commit记录
- branchA commit记录
此时如果想要把branchA的最后一次commit合入到master时,我们常用的方法有:
- 使用
git merge
git checkout master
git merge barnchA
2. 使用
git rebase
git checkout master
git rebase barnchA
还有一种不常用的是
git cherry-pick
git checkout master
// 069dd85是在branchA分支的提交的commit id
git cherry-pick 069dd85
虽然以上方法都可以将branchA的commit合入到master,但是还会有不同:
在上面的简单的例子中git rebase
和git 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)
冲突
应用cherry-pick
也会遇见冲突,当遇见冲突时,cherry-pick
会停下来,需要让我们来决定如何继续操作。
--continue
:解决冲突后,将修改的文件重新加入暂存区git add .
,然后使用命令,以此来继续
git cherry-pick --continue
--skip
:跳过当前的提交,继续进行队列中其余的命令。
git cherry-pick --skip
--quit
:发生代码冲突后,退出cherry-pick
,但是不回到操作前的样子
git cherry-pick --quit
--abort
:当需要放弃合并是,可以使用如下命令回退到操作前的样子
git cherry-pick --abort
结束
以上就是cherry-pick
的常用方法,别看很简单,实际上已经够用了,并且非常非常有用,快快用起来吧~
转载自:https://juejin.cn/post/7249163421692723257