【随笔】Git 实战篇 -- 开心 commit 之后,发现有一处bug还需要改,只能 reset 撤销然后再次提交 -- git reset --(四十三)

请添加图片描述

  • 💌 所属专栏:【Git】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩

请添加图片描述

文章目录

  • 前言
  • 一、介绍
  • 二、问题背景
  • 三、模拟场景
      • 1、开始结构
      • 2、克隆仓库
      • 3、本地提交
      • 4、撤销提交
  • 四、解决方案
      • 1、方案一
        • Step 1、回退撤销改动
        • Step 2、撤销改动
        • Step 3、修改 C2 改动再提交
        • Step 4、合并 C3
        • Step 5、提交至远程
      • 2、方案二
        • Step 1、merge 合并 C3
        • Step 2、提交至远程
  • 总结


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【Git】专栏的第43篇文章;
  今天又是学习 Git 实战篇 的一天,总结在使用 Git 过程中遇到的问题 💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
  专栏地址:【Git】 , 此专栏是我是夜阑的狗对Git,Gitee等工具使用过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


一、介绍

  这里给大家推荐一个好用的 Git在线练习地址。在这练习网站里面也有自己的教程,可以一步一步跟着教程学习吧,记录下自己的所感所悟。
  从题目中不难看出今天我们的主角就是 git reset。在 Git 的日常使用中,git reset 指令用于将HEAD指向的当前分支位置重置为指定的提交,并可选择性地更新暂存区域和工作目录。这个命令通常用于撤销之前的提交或者重置当前分支到一个特定的状态。然而,不当的使用或复杂的合并场景下,git reset 操作有时会遇到需要回退该操作的方式(简而言之就是 reset 内容不满足开发者需求),让开发者头疼不已。接下来就让我们看看在实际项目过程中 git reset 的时候想要回退该操作的时候是怎么解决的吧。话不多说,让我们开启新的征程吧。 🚀 🚀 🚀 Let’s GO GO GO !!! <\font>

在这里插入图片描述

二、问题背景

  今天跟同事遇到 git 提交的一个问题,本地分支 commit 提交两次,发现第一次提交那里有一些地方忘记修改了,需要回退第一笔提交,但是想保留第二提交不动。然后他使用 git reset HEAD^, 就只把一笔改动给回退。此时🧐,需要把状态还原回去重新尝试,于是我让同事打 git reset --abort(这里我学艺不精就没咋记住那个回退命令 😭)回退一下,同事就是执行 git reset --abort ,然后就没有然后,因为这个命令压根就不存在,纯粹是我记混了哈哈哈哈哈。没办法只能用 git 模拟出他的场景,利用可视化界面来帮我们理清一下思路。

三、模拟场景

  首先来到我们的 Git 练习场地,进来可以发现就只有一个本地分支,所以我们需要一步一步来模拟出他的错误场景。

1、开始结构

在这里插入图片描述

  接下来就让我们来看看是怎么操作的吧。

2、克隆仓库

  首先我们先把远程仓库克隆下来。

git clone

  很简单吧!运行结果如下图所示:
在这里插入图片描述

3、本地提交

  在本地分支上提交l两次,这里先提交在 fakeTeamwork 也是可以的。

git commit
git commit

  很简单吧!运行结果如下图所示:

在这里插入图片描述

4、撤销提交

  在本地分支上进行两次 commit 提交。

git reset HEAD^

  很简单吧!运行结果如下图所示:

在这里插入图片描述

  到这里基本上已经把问题场景复现出来了。

四、解决方案

  通过前面的步骤已经把问题场景可视化出来了,我们可以看到想要把当前状态回退到 C5 状态。这里通过查阅 git reset 的命令,🚨 🚨 🚨 注意一下,从了 【随笔】Git – 高级命令(上篇)(六) 了解到 git reset 回退的参数是 --hrad,而不是 --abort。谨记啊😭,看来我还得在多精进精进。

1、方案一

Step 1、回退撤销改动

  将前面撤销改动回退到指定状态,将HEAD指向的当前分支位置重置为指定的提交,同时将暂存区域和工作目录都重置为指定提交的状态。

git reset --hard C5

  运行结果如下图所示:

在这里插入图片描述

  🚨 🚨 🚨 注意一下,这里 --hard 参数是属于硬重置,不保留修改的文件,恢复到最近一次提交的状态。想要指定提交之后的修改移除暂存区,但保留在工作目录中,就需要 git reset --mixed 了。

在这里插入图片描述
  我们也可以发现 git 练习网站是不支持 git reset --mixed 的,所以想要验证的话只能真正的 git 仓库了。

Step 2、撤销改动

  通过多次尝试,发现想要只回退第二笔,保留第一笔改动不动的情况貌似有点不知道怎么实现,当然有知道的大佬也可以在评论区告诉我哈,或者我知道了也会第一时间更新的,这里我就随意操作一下哈。

git reset HEAD~2

  运行结果如下图所示:

在这里插入图片描述

Step 3、修改 C2 改动再提交

  当我们撤销两笔改动后,需要将 C2 提交点补齐之前忘记修改的部分,然后再次提交。

git commit

  运行结果如下图所示:

在这里插入图片描述

Step 4、合并 C3

  此时 C4 就是我们修改 C2 后的结果,接下来就只要把 C3 合并进来就可以了。这里用 git cherry-pick 命令来指定合入对应的提交点即可。

git cherry-pick C3

  运行结果如下图所示:

在这里插入图片描述

  🚨 🚨 🚨 注意一下,这里是不推荐用 rebase 来合并 C3,因为 rebase 会把一整条分支合并进来,所以 C2 也会跟着合并进来,显然不符合我们的要求。可以来看一下 rebase 是怎么跑的:

git rebase main C3

  运行结果如下图所示:

在这里插入图片描述

Step 5、提交至远程

  最后将处理好的 commit 提交至远程仓库即可。

git push

  运行结果如下图所示:

在这里插入图片描述

  Oh yeah,圆满解决!!!🎉🎊🎉实际上同事也按这个方法顺利解决问题。

2、方案二

  当然不止上面这一种解决方法,这里提供另外一种方法,我们可以不用 cherry-pick方式合入对应的分支,而是通过 merge 方式来合入分支。前面步骤这里就省略了,直接来到合并环节。

Step 1、merge 合并 C3
git merge C3

  运行结果如下图所示:

在这里插入图片描述

Step 2、提交至远程

  最后将处理好的 commit 提交至远程仓库即可。

git push

  运行结果如下图所示:

在这里插入图片描述

  这里两种方法都能解决该问题,区别在于第一种方法远程仓库上不会产生多余提交,是一条干净的 commit,而第二种方法则会在远程仓库上将本地分支的合并操作也一并合进来。一些开发人员喜欢保留提交历史,因此更偏爱 merge。而其他人(比如我自己)可能更喜欢干净的提交树,于是偏爱 rebase。仁者见仁,智者见智。 😄 当然知道更便捷方法的大佬也可以在评论区告诉我哈。


总结

  感谢观看,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:

  • 😀 【LeetCode题解(持续更新中)】

  • 🥇 【恒玄BES】

  • 🌼 【鸿蒙系统】

  • 💎 【蓝牙协议栈】

  • 🎃 【死机分析】

  • 👑 【Python脚本笔记】

  • 🚝 【Java Web项目构建过程】

  • 💛 【微信小程序开发教程】

  • 【JavaScript随手笔记】

  • 🤩 【大数据学习笔记(华为云)】

  • 🦄 【程序错误解决方法(建议收藏)】

  • 🔐 【Git 学习笔记】

  • 🚀 【软件安装教程】



订阅更多,你们将会看到更多的优质内容!!

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

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

相关文章

Tween.js在Three.js中的应用:为3D动画添加流畅过渡

前言 在Web开发领域&#xff0c;Three.js已经成为构建精彩3D内容的首选库之一。它让开发者能够轻松地在浏览器中创建和展示复杂的3D场景。然而&#xff0c;要让这些场景栩栩如生&#xff0c;平滑的动画效果是必不可少的。这就引入了Tween.js——一个轻量级但功能强大的JavaScr…

Redis 持久化: RDB和AOF

文章目录 ⛄1.RDB持久化&#x1fa82;&#x1fa82;1.1.执行时机&#x1fa82;&#x1fa82;1.2.RDB原理&#x1fa82;&#x1fa82;1.3.小结 ⛄2.AOF持久化&#x1fa82;&#x1fa82;2.1.AOF原理&#x1fa82;&#x1fa82;2.2.AOF配置&#x1fa82;&#x1fa82;2.3.AOF文件…

CRM系统主要是干什么?CRM系统主要功能和作用

什么是CRM 系统&#xff1f;CRM系统到底是干什么的&#xff1f;不同的企业人员该如何利用CRM去解决他们的问题等等&#xff0c;问题太多了&#xff0c;今天来为大家详细介绍。 干货满满&#xff0c;建议收藏&#xff01;&#xff01; 首先第一个问题&#xff0c;什么是CRM系统…

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件)

Linux 服务查询命令&#xff08;包括 服务器、cpu、数据库、中间件&#xff09; Linux获取当前服务器ipLinux使用的是麒麟版本还是cenos版本Linux获取系统信息Linux查询nignx版本 Linux获取当前服务器ip hostname -ILinux使用的是麒麟版本还是cenos版本 这个文件通常包含有关L…

ctfshow jwt web入门

jwt令牌由三部分组成&#xff0c;由.分割 Header Payload Signatureheader示例 {typ: JWT,alg: HS256 }# typ&#xff1a;声明类型 # alg&#xff1a;声明加密的算法 通常直接使用 HMAC SHA256 需要注意的是因为header部分是固定的所以&#xff0c;生成的base64也是固定的以ey…

20、matlab信号波形生成:狄利克雷函数、高斯脉冲和高斯脉冲序列

1、狄利克雷函数生成波形diric()函数 语法&#xff1a;y diric(x,n) 返回n次的狄利克雷函数对输入数组x的元素求值。 1&#xff09;diric()函数 代码 x linspace(-2*pi,2*pi,301);%定义x取值 d6 diric(x,6); d7 diric(x,7); subplot(2,1,1) plot(x,d6) ylabel(n 6) tit…

湖南源点(市场研究)咨询 有效的市场调研是商业定位的基础

本文由湖南&#xff08;市场调研&#xff09;源点咨询编辑发布 近20年&#xff0c;中国购物中心井喷式的发展&#xff0c;经营面积几何倍的增长&#xff0c;但在现今竞争如此激烈的商业环境中&#xff0c;消费者的消费信心不足&#xff0c;购物中心同质化严重&#xff0c;经营…

flyfish3.0.0配置避坑

1.基础环境准备篇 doc/01-基础环境准备篇.md 云智慧/FlyFish - Gitee.com 使用教程里给出的java环境时&#xff0c;可以显示java版本&#xff0c;但是不能显示Maven的版本 改为&#xff1a; export NODE_HOME/usr/local/node/node-v14.19.3-linux-x64 export PATH$NODE_HOME…

100页2秒?我们为什么需要这样的文档解析速度

近期&#xff0c;TextIn通用文档解析完成最新一版产品迭代&#xff0c;将100页文档解析速度提升至最快2秒以内。 P50&#xff08;百页&#xff09; P90&#xff08;百页&#xff09; P95&#xff08;百页&#xff09; P99&#xff08;百页&#xff09; 平均&#xff08;单页…

记某网关系统通用漏洞的挖掘

前言 本篇文章分享一下通用漏洞挖掘的过程&#xff0c;想要获得通用漏洞证书&#xff0c;首先要求是中危及中危以上的通用型漏洞且所属公司的注册资本大于5000万。挖掘一个漏洞其实不难&#xff0c;个人觉得是目标公司资产的搜集。访问CNVD平台发现某网关系统被师傅提交过任意…

V神的傲慢与偏见

原创 | 刘教链 隔夜BTC&#xff08;比特币&#xff09;小幅回升至5日线67.7k附近。前日5.31教链内参“美核心通胀放缓&#xff0c;利好宽松周期落地”[链接]提到&#xff0c;以太坊创始人Vitalik Buterin&#xff08;V神&#xff09;新发表了一篇长文&#xff0c;主题是关于他“…

H6911 DC2.6-40V升压IC 升24V36V48V60V80V100V10A数转模无频闪LED芯片

H6911 DC2.6-40V升压IC是一款升压恒流LED恒流驱动器&#xff0c;具有多种特点&#xff0c;适用于多种的LED照明应用领域。以下是关于该产品的详细解释&#xff1a; 一、产品概述 H6911是一款专为LED照明设计的升压恒流驱动器。它能在2.6至40V的宽电压范围内稳定工作&#xff0c…

性能优化随笔(一)

在软件开发过程中&#xff0c;一般要先实现功能方面的需求&#xff0c;功能方面的需求开发完毕之后&#xff0c;往往会考虑性能方面的优化。在业务发展的初期&#xff0c;性能往往能满足使用的需求&#xff0c;这时性能优化不是必不可少的。随着业务的发展&#xff0c;软件复杂…

Window11开放端口

&#xff08;1&#xff09;打开控制面板&#xff0c;进入【控制面板\系统和安全\Windows Defender 防火墙】 &#xff08;2&#xff09;点击左侧菜单【高级设置】&#xff0c;进入防火墙设置页面 &#xff08;3&#xff09;根据需要选择【入站规则】或者【出站规则】&#xff…

粒子群算法Java实现

粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种受到自然界群体行为启发的优化算法&#xff0c;由James Kennedy和Russell Eberhart于1995年提出。该算法模拟了鸟类或其他动物群体&#xff08;如鱼群&#xff09;的社会和集体行为&#x…

C++:特殊类设计和四种类型转换

一、特殊类设计 1.1 不能被拷贝的类 拷贝只会放生在两个场景中&#xff1a;拷贝构造函数以及赋值运算符重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c;只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98&#xff1a; 1、将拷贝构造函数与赋值运算符重载只…

linux 内核映像差异介绍:vmlinux、zImage、zbImage、image、uImage等

一、背景 Linux内核是整个Linux操作系统的核心部分&#xff0c;它是一个负责与硬件直接交互的软件层&#xff0c;并且提供多种服务和接口&#xff0c;让用户程序能够方便地使用硬件资源。 当我们编译自定义内核时&#xff0c;可以将其生成为以下内核映像之一&#xff1a;vmli…

WordPress博客主题触屏版社区源码

下载地址&#xff1a;WordPress博客主题触屏版社区源码

【Java面试】八、MyBatis篇

文章目录 1、MyBatis执行流程2、MyBatis延迟加载使用3、MyBatis延迟加载的原理4、MyBatis的一级、二级缓存4.1 一级缓存4.2 二级缓存4.3 注意点 5、面试 1、MyBatis执行流程 从mybatis-config.xml读取配置&#xff08;数据库连接信息&#xff0c;xml映射文件&#xff09; 构建…

LeetCode 算法:无重复字符的最长子串c++

原题链接&#x1f517;&#xff1a;无重复字符的最长子串 难度&#xff1a;中等⭐️⭐️ 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所…