git删除某次commit的代码

这里写目录标题

    • 1.问题背景
    • 2.问题拆解
    • 尝试:a.使用git reset --hard HEAD (不行,局限性太大)
    • 尝试:b.使用git rebase -i HEAD (可以,但push -f不太友好)
    • 尝试:c.使用git revert HEAD (可以,但要注意多次revert)
    • 3.参考链接:
    • 4.demo地址

1.问题背景

主要是同事的代码合并到了dev分支,然后自己的代码也合并到了dev分支,但是其中有一个commit不想要,因为这次commit是一个功能,但是暂时是不需要上线的,所以需要把这个commit给它弄出去。

2.问题拆解

实际情况用demo解释:假设有两个分支:feature1和feature2分支,feature1有两个commit分别是:提交了1,3功能 。
image.png
feature2分支也有两个commit,分别是提交了2,4功能
image.png
他们都合到了develop分支上,此时四个功能都在dev分支上了。
image.png
此时出现了一个情况,就是功能1其实做的不是很好,需要把功能1的代码从develop上弄出去。大家一般的想法都是怎么样的呢?

尝试:a.使用git reset --hard HEAD (不行,局限性太大)

git reset --hard HEAD

比如我们可以使用git reset --hard 35d037f 这个命令,就能保留将代码保留到 feat:功能2开发完成这里,feat:功能1完成的代码就被删掉了。但是大家都知道,不止功能1被删了,功能3和4也会被删掉。所以这种方法不行

尝试:b.使用git rebase -i HEAD (可以,但push -f不太友好)

很多人应该知道这个命令,git rebase,可以用来合并多个commit,也可以用来删除某个commit。
输入(为什么是这个commitID,原因是他会把最近一次到这个commitID之间的所有commit列出来,功能1在它前一个,所以使用这个,你也可以使用前几个,比如99e2ce8):

git rebase -i 35d037f

输入之后会出现下面这个画面,此时你会发现你的git窗口好像卡住了一样,其实不然。
image.png
你需要按下键盘的i键(说明你要插入内容),
image.png
把pick改成drop
image.png
按一下esc,然后:wq保存退出
image.png
输入并保存后可能会看到以下的画面,说明我们在rebase的时候发生了一点冲突。此时我们有两种方法来处理:
image.png
1.打开vscode,将冲突处理完毕之后git add . 然后使用 git rebase --continue来继续进行rebase操作。(这里我们使用继续合并来继续我们的例子)
image.png
2.第二种处理就是git rebase --abort 取消本次rebase操作(如果冲突实在是太多,可以使用这个来取消合并),但是这个会让你刚才drop的动作失效,就是没有删除掉commit的意思

rebase成功之后可以到代码里面去检查一下还有没有功能1的代码,你此时会发现功能1的代码已经被删除干净了。当你觉得完事大吉的时候,很不幸的告诉你,你在git push的时候会遇到下面的这个情况:
image.png
原因是你把develop已经推送到远程仓库了(如果没有的请忽视,可以正常push)。但是git在git push的时候,发现你本地的仓库和远程的比还少了一个commit(就是我们删的那个)。所以git会让你使用git pull再进行push。此时我们千万不要git pull,否则就会把我们删掉的那个commit给找回来。此时我们只能使用git push -f来强制覆盖远程仓库的代码了(不太友好)。
image.png

注意点:
如果你的develop已经使用rebase - i 删除了那次的commit,但是此时你又用develop去合并featrue1这个分支的话,这个功能1的代码就会重新的应用到develop上了。
image.png

尝试:c.使用git revert HEAD (可以,但要注意多次revert)

这里的HEAD 是你需要删除哪个就revert哪个。跟rebase不一样,rebase需要提前一个或者两个。

git revert HEAD

image.png
这里我这个demo一次就成功了,其实在项目里还是报错了。需要我们指定主线分支,大概报错是这样子的
image.png
此时如果遇到这个情况我们需要用这个命令(-m 后面要跟一个 parent number 标识出"主线",一般使用 1 保留主分支代码,说起来还挺绕的,大家可以看下我发的参考链接,但是效果就是你用了这个:在develop分支就把这个commit去除了。):

git revert -m 1 <commitHash>

image.png
image.png
注意点:你的develop把功能1的代码去除了,但是后面你从featrue1分支又想把功能1合并回develop之后,你会发现,develop还是没有功能1的代码。原因就是,你的合并过来的a3218c7这个commit,一直会被8f9a30b这个 revert掉(意思就是清除掉。)
如果你要让这个代码重新起作用,你需要revert 你之前的那个revert commitID

git revert 8f9a30b

image.png
这样子代码就有了(这里的两次revert一定要注意,不然你的代码怎么丢失的都不知道)。
image.png

3.参考链接:

a.Git不要只会pull和push,试试这5条提高效率的命令:
https://juejin.cn/post/7071780876501123085?searchId=2024040110361264FD690F930E69820F65#heading-22
b.git 教程 --git revert 命令
https://www.cnblogs.com/ahzxy2018/p/14521922.html
c.Git进阶命令-revert
https://www.cnblogs.com/qdhxhz/p/17947598

4.demo地址

https://github.com/rui-rui-an/gitdelcommit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/786799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ETL工具-nifi干货系列 第六讲 处理器JoltTransformJSON

1、处理器作用 使用Jolt转换JSON数据为其他结构的JSON,成功的路由到success,失败的failure。处理JSON的实用程序不是基于流的&#xff0c;因此大型JSON文档转换可能会消耗大量内存。 Jolt&#xff1a;JSON 到 JSON 转换库&#xff0c;用 Java 编写&#xff0c;其中转换的 &qu…

LINUX笔记温习

目录 DAY1 DAY2 day3&#xff1a; day4 day5 day6 day7 day8 day9 day10 day11 day12 day13 day14 day15 20day DAY1 1、多层级文件夹创建要带-p&#xff1b; 2、创建多文件&#xff0c;要先到该目录下才能创建(第一个目录必须存在才能有效建立)&#xff1b; D…

Golang 内存管理和垃圾回收底层原理(二)

一、这篇文章我们来聊聊Golang内存管理和垃圾回收&#xff0c;主要注重基本底层原理讲解&#xff0c;进一步实战待后续文章 垃圾回收&#xff0c;无论是Java 还是 Golang&#xff0c;基本的逻辑都是基于 标记-清理 的&#xff0c; 标记是指标记可能需要回收的对象&#xff0c…

2023年EI会议论文已见刊/检索进展汇总

2023年录用的会议论文已在SPIE、ACM、IEEE等出版社正式上线见刊&#xff0c;并已陆续完成EI Compendex数据库收录&#xff0c;详情如下&#xff1a; EIECT 2023——IEEE出版&#xff0c;并完成EI收录 会议信息&#xff1a; 第三届电子信息工程与计算机技术国际学术会议&…

探索使用对比损失的孪生网络进行图像相似性比较

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 简介 在计算机视觉领域&#xff0c;准确地测量图像相似性是一项关键任务&#xff0c;具有广泛的实际应用。从图像搜索引擎到人脸识别系统和基于内容的推荐系统&#xff0c;有效比较和查找相似图像的能力非常重要。Siames…

QA测试开发工程师面试题满分问答3: python的深拷贝和浅拷贝问题

在 Python 中&#xff0c;深拷贝&#xff08;deep copy&#xff09;和浅拷贝&#xff08;shallow copy&#xff09;是用于创建对象副本的两种不同方式。 浅拷贝是创建一个新的对象&#xff0c;该对象与原始对象的内容相同&#xff08;包括内部嵌套对象的引用&#xff09;&…

Higress 基于自定义插件访问 Redis

作者&#xff1a;钰诚 简介 基于 wasm 机制&#xff0c;Higress 提供了优秀的可扩展性&#xff0c;用户可以基于 Go/C/Rust 编写 wasm 插件&#xff0c;自定义请求处理逻辑&#xff0c;满足用户的个性化需求&#xff0c;目前插件已经支持 redis 调用&#xff0c;使得用户能够…

LeetCode刷题:无重复字符的最长子串 详解 【3/1000 第三题】

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

【THM】Active Reconnaissance(主动侦察)-初级渗透测试

介绍 在网络安全模块的第一个房间里,我们主要进行被动侦察。在第二个房间中,我们重点关注主动侦察以及与之相关的基本工具。我们学习使用网络浏览器来收集有关我们目标的更多信息。此外,我们讨论使用简单的工具(例如ping、traceroute、telnet和 )nc来收集有关网络、系统和…

探讨在大数据体系中API的通信机制与工作原理

** 引言 关联阅读博客文章&#xff1a;深入解析大数据体系中的ETL工作原理及常见组件 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;数据已经成为企业发展和决策的核心。随着数据规模的不断增长…

计算机组成原理实验(汉字编码实验)

&#xff08;汉字编码实验&#xff09; 海明校验码实验

每天五分钟计算机视觉:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

LeetCode-240. 搜索二维矩阵 II【数组 二分查找 分治 矩阵】

LeetCode-240. 搜索二维矩阵 II【数组 二分查找 分治 矩阵】 题目描述&#xff1a;解题思路一&#xff1a;从左下角或者右上角元素出发&#xff0c;来寻找target。解题思路二&#xff1a;右上角元素&#xff0c;代码解题思路三&#xff1a;暴力也能过解题思路四&#xff1a;二分…

家庭网络防御系统搭建-配置流量镜像到NDR系统

由于需要将家庭网络中的全部流量送到NDR分析系统进行分析&#xff0c;因此需要一个具备流量镜像功能的交换机或者路由器。在前面文章所提及的家庭网络架构中&#xff0c;需要一台交换机即可拷贝东西向流量以及南北向流量。当然如果家庭中的路由器或者其他设备具备交换机镜像功能…

基于单片机智能数字温度采集报警器系统设计

**单片机设计介绍&#xff0c;基于单片机智能数字温度采集报警器系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能数字温度采集报警器系统设计的核心目标是通过单片机实现温度的实时采集、显示以及超温报警…

深度学习_NLP常用库报错问题解决

1、SpaCy can‘t find model ‘zh_core_web_sm‘. It doesn‘t seem to be a python package or a valid path to a data 或者 can‘t find model ‘en_core_web_sm‘. It doesn‘t seem to be a python package or a valid path to a data 安装最新的版本&#xff1a; en_…

C++项目——集群聊天服务器项目(七)Model层设计、注册业务实现

在前几节的研究中&#xff0c;我们已经实现网络层与业务层分离&#xff0c;本节实现数据层与业务层分离&#xff0c;降低各层之间的耦合性&#xff0c;同时实现用户注册业务。 网络层专注于处理网络通信与读写事件 业务层专注于处理读写事件到来时所需求的各项业务 数据层专…

UE5 SQLite笔记

开发环境&#xff1a; 系统&#xff1a;Windows 10 64 bit 引擎&#xff1a;Unreal Engine 5.1.1 IDE&#xff1a;JetBrains Rider 2023.2.1 语言&#xff1a;C 工具&#xff1a;DB Browser for SQLite SQLite数据类型&#xff1a; //INTEGER TEXT BLOB REAL NUMERIC/*integer…

关于OpenFeign的返回类型包装问题

在一天夜里。我在使用feign的调用时&#xff0c;突然出现了一点点问题。 就是对于feign类型的包装问题。产生了疑问。 在后来&#xff0c;也就是今天。在网上取取经。看到了一个答案。说&#xff1a;feign的调用会有一个编码器和解码器。 使用feign的解码器。他的原理也很简…

NoSQL之Redis配置

文章目录 NoSQL之Redis配置一、关系数据库和非关系数据库1、关系型数据库2、非关系型数据库3、非关系型数据库产生背景4、关系型数据库和非关系型数据库的区别4.1 数据存储方式不同4.2 扩展方式不同4.3 对事务性的支持不同 5、总结5.1 关系型数据库5.2 非关系型数据库 二、Redi…