git管理,cherry-pick提取拉取本地仓库项目中指定commit

191 阅读4分钟

src=http---blog-file.uiaoin.com-p-98f2c59a19d96e9f4a03257f0d348510.gif&refer=http---blog-file.uiaoin.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto.gif 搜索关键词:git 敏捷开发 本地仓库 commit 指定 删除 拉取 提取

问题

直接说问题,一个项目,老板要求a,b,c三个需求。

功能正常开发,一切没有问题。

但临上线,测试突然发现c功能有问题,不管是什么问题吧,反正c现在上不了了

老板拍板,c功能下周想办法,这周先把a,b功能放上去

现在我们可以选的解决方式:

a.把好不容易敲出来的代码一行一行删除,直到c功能剔除掉(而且还有一定风险,毕竟有可能删多,有可能删少导致bug)

b.找找git上有没有什么突破口

这里果断选b啊

解决方案

1.切换分支,并且在本地IDE切换回自己开发功能之前的进度,或者说,重新拉一次线上的最新代码(切换分支这一步是必须的,实在不行,你新开一条分支)

2.使用git cherry-pick 解决问题

git cherry-pick (commitID)

简单概括:可以把其它分支上的commit一个个摘下来,合并到当前分支。(功能类似于植物嫁接)

关键词:可以摘取其他分支,并合并

git cherry-pick commitID

git cherry-pick 11afa2fbc6d4e33fc2726748998246e54ba4744d

方案逻辑图

image.png

演示

我从头到位演示一遍

第一部分:介绍背景

image.png

image.png

现在要求:只将commit:a,b 上线,并且保留c便于之后开发

第二部分:新开分支,保证纯洁

image.png

image.png

我需要先把这个分支恢复至干净纯洁,没有被我coding过的时候

image.png

先使用

git log

用于查看commit 历史

image.png


再使用

git reset (commitID)

将代码回滚到开发前指定位置

image.png

image.png

实际项目当然不可能像现在这么干净,往往是一大片更改

现在,只需要将所有更改全部清空掉

image.png

然后

git push -f

直接强制推送到本地仓库

注:因为本地仓库里的代码比现在IDE里的代码还要多,所以需要强制推送,回避推送限制

当然,这部分最重要的作用就是将新分支的代码恢复到线上代码未开发前一样干净,至于方式是什么,并不重要

image.png

现在本地仓库已经回滚到指定位置

第三部分:摘取老开发分支的commit到新分支,或者说,嫁接

注:说是摘取,实际是copy,摘取后老开发分支并不会受影响

image.png

当前项目位置在新分支

image.png

开始使用 git cherry-pick commitID

image.png

并将其push或同步到本地仓库

ok,现在再看一下本地仓库这边

image.png

条件满足😌,新分支,只有a功能和b功能

老分支

image.png

之前的东西也都还在(只不过项目结束要及时删除废分支)

第四部分:收尾

现在不管是gitLab上的marge Request

还是 gitee上的pull Request

就都可以继续下去了

以下展示的是gitee上的pull Request image.png

image.png

结语

注意git规范,它会帮你省很多事,注意做事风格,心有猛虎,细嗅蔷薇

作者ps

抱歉断更这么久,这段时间发生很多事,失业,感情,家庭矛盾,挣扎了很久,有过很多思考,总的来说结果是好的,更多是看开了,感触挺深,如果感到迷茫了,失意了,心记送给各位看客:

我们没有生活在伊甸园,世间所有事也不会遂自己的意,

每一代人有每一代人的困苦,这是人生的必经之路,

哪怕是1000年前的古人,也有他的痛苦,

我们不能因为短暂的煎熬觉得自己受了命运的委屈,

它平等的照顾每一个人。

不要轻视自己,你远比你认识的自我要更加优秀。

不要麻痹自己,遇到伤心的事,放下手头的事,想想美好的事。

哪怕很累,也记得迈出脚步,你会在自己注定到达的时候到达哪里,

在到达之前,

一边接受现实,一边祈祷。

WechatIMG19.jpg

加油,陌生人,祝你幸福❤️