【随笔】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…

【基于Raft的k-v存储数据库实现】

基于Raft的k-v存储数据库实现 基本概念1. 什么是分布式系统2. 什么是Raft协议3. 什么是序列化和反序列化4. RPC相关5. c11的部分新特性6. 什么是共识&#xff0c;一致性算法7. 共识算法要满足的性质8. Raft中的一些重要概念8.1 Raft是如何保证一个Term只有一个Leader的&#xf…

《软件需求分析与系统设计》课程设计报告——英语考试与评分系统

《软件需求分析与系统设计》课程设计报告 课题名称: 英语考试与评分系统 姓名: xxx 专业: 软件工程 班级: xxx 院系: 信息与工程学院 指导教师: xxx 时间: 2023年11月21日 一、题目概述 1. 系统简介 英语考试与评分系统是一套高效的管理软件,旨在应对大学英语…

PTA R6-1 寻找链表元素的前驱结点

本题要求实现一个函数&#xff0c;可查找单链表(无监督元)中某个元素的前驱结点。例如链表中的元素为1&#xff0c;6&#xff0c;3&#xff0c;2&#xff0c;4&#xff0c;查找3的前驱为6。如果表中无此元素或没有前驱则返回空指针。 函数接口定义&#xff1a; ptr pre (ptr …

监控易监测对象及指标之:全面监控阿里专有云Redis

随着企业业务的快速发展&#xff0c;数据库作为支撑业务运行的核心组件&#xff0c;其性能和稳定性显得尤为重要。Redis&#xff0c;作为一款高性能的内存数据库&#xff0c;广泛应用于缓存、消息队列、分布式锁等场景。在阿里专有云环境中&#xff0c;Redis的性能监控更是至关…

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文件…

Python项目开发实战:AI智能图像识别工具(案例教程)

一、项目背景与意义 随着人工智能技术的快速发展,图像识别技术已成为众多领域的关键技术之一。从安防监控到自动驾驶,从医疗诊断到智能家居,图像识别技术都发挥着举足轻重的作用。因此,开发一款高效、准确的AI智能图像识别工具具有重要的现实意义和应用价值。 二、项目目标…

【MyBatisPlus】MyBatisPlus介绍与使用

【MyBatisPlus】MyBatisPlus介绍与使用 文章目录 【MyBatisPlus】MyBatisPlus介绍与使用1、什么MyBatisPlus2、MyBatisPlus的CRUD操作3、MyBatisPlus分页使用 1、什么MyBatisPlus MyBatisPlus&#xff08;简称MP&#xff09;是基于MyBatis框架基础上开发的增强型工具&#xff0…

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

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

uniapp 小程序运行报错plus...

plus.XXX方法是针对Android安卓的 解决方式&#xff1a; 在有关代码内添加 #ifdef APP-PLUS // #ifdef APP-PLUS ... 代码块 ....// #endif

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

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

达梦数据库备份还原bak

s1.–关闭数据库 2.–数据库还原&#xff1a; 到数据库bin下 执行 /dmrman RESTORE DATABASE /dm/data/xx/dm.ini FROM BACKUPSET /dm/data/backup/DB_xxx_FULL_2024_06_02_23_00_04;3.–数据库恢复&#xff1a; ./dmrman RECOVER DATABASE /dm/data/tjwater/dm.ini FROM BACKU…

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…

C++中的‘friend‘关键字

目录 友元函数&#xff08;Friend Function&#xff09; 友元类&#xff08;Friend Class&#xff09; 友元函数模板&#xff08;Friend Function Template&#xff09; 友元类模板&#xff08;Friend Class Template&#xff09; 总结 摘要 在 C 中&#xff0c;friend 关…

英伟达算力芯片为什么能够“一统天下”

英伟达算力芯片能够一统天下&#xff0c;主要归因于以下几个关键因素&#xff1a; 技术创新与产品优势&#xff1a; 英伟达自1993年成立以来&#xff0c;一直在GPU和AI芯片领域进行持续的技术创新。特别是随着深度神经网络技术的突破&#xff0c;英伟达借助CUDA平台在人工智能…

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

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

C语言题目:求具有abcd=(ab+cd)^2性质的四位数

题目描述 3025这个数具有一种独特的性质&#xff1a;将它平分为二段&#xff0c;即30和25&#xff0c;使之相加后求平方&#xff0c;即(3025)2&#xff0c;恰好等于3025本身。请求出具有这样性质的全部四位数 输入格式 无 输出格式 满足题意的数全部四位数(从小到大输出,且…

mybatis执行自定义sql

背景 在开发过程中遇到一个需求&#xff1a;希望从数据库中读取预先定义好的sql&#xff0c;根据传参进行参数预处理后执行sql语句。结合项目实际情况我决定使用mybatis执行预定义sql。 实现过程 缓存我们自定义的sql语句 MappedStatement ms new MappedStatement.Builder(co…

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…