【随笔】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.mfbz.cn/a/674072.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ小结

MQ分类 Acitvemq kafka 优点&#xff1a;性能好&#xff0c;吞吐量高百万级&#xff0c;分布式&#xff0c;消息有序 缺点&#xff1a;单机超过64分区&#xff0c;cpu会飙高&#xff0c;消费失败不支持重试 &#xff0c; Rocket 阿里的mq产品 优点&#xff1a;单机吞吐量也…

如何赋予LLM多模态能力(MLLM)

基本概念 多模态大型语言模型&#xff08;MLLMs&#xff09;是人工智能领域的一项前沿技术&#xff0c;旨在设计能够理解和生成跨越多种形式数据输入&#xff08;如文本和图像&#xff09;内容的模型。 链接文本和视觉模态&#xff1a;MLLMs能够整合文本和视觉数据源的信息。…

众汇:外汇狙击指标如何使用?

对于投资者来说&#xff0c;我们各位交易的目的是什么?WeTrade众汇认为那就是盈利。所以来说有一个指标对各位投资者来说那是相当有帮助的。这是因为对于交易者而言&#xff0c;利用这些指标可以快速识别盈利的买卖时机。当我们选择一个指标之后&#xff0c;深入了解其适用范围…

【机器学习】机器学习与AI大数据的融合:开启智能新时代

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 机器学习与AI大数据的融合 &#x1f4d2;1. 引言&#x1f4d5;2. 机器学习与大数据&#x1f3a9;机器学习与大数据的特征&#x1f388;大数据如…

基于全志T507-H的Linux-RT实时性测试案例分享

本文将为各位工程师演示全志T507-H工业评估板&#xff08;TLT507-EVM&#xff09;基于IgH EtherCAT控制伺服电机方法&#xff0c;生动说明Linux-RT Igh EtherCAT的强大之处&#xff01; Linux-RT系统的优势 内核开源、免费、功能完善。 RT PREEMPT补丁&#xff0c;使Linux内…

树形结构获取所有直属父级节点

递归获取 let arr [{name: "/",meta: {},children: [{name: "home",},{name: "home2",},{name: "common-components",children: [{name: "form-component",}]},{name: "multilevel-menu",children: [{name: &qu…

【数据结构】复杂度的重要性—–决定程序运行的效率

【数据结构】复杂度的重要性—–决定程序运行的效率 前言 在我们写算法的时候&#xff0c;常常会需要考虑一个问题&#xff1a;这个算法好不好&#xff1f;而这个“好”实际上就取决于是算法的复杂度。 算法复杂度&#xff08;Algorithmic Complexity&#xff09;是指算法在编…

粒子系统技术在AI绘画中的创新应用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;AI绘画已经成为艺术创作和数字媒体领域的一大热点。粒子系统作为一种模拟复杂物理现象的技术手段&#xff0c;其在AI绘画中的应用为创作过程带来了前所未有的灵活性和创新性。本文将深入探讨粒子系统技术的原理、特点以…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:人工智能消防应用

青鸟消防股份有限公司成立于2001年6月&#xff0c;于2019年8月在深圳证券交易所挂牌上市&#xff0c;成为中国消防报警行业首家登陆A股的企业。公司始终聚焦于消防安全与物联网领域&#xff0c;主营业务为“一站式”消防安全系统产品的研发、生产和销售。公司产品已覆盖了火灾报…

【Linux 网络】高级 IO -- 详解

一、IO 的基本概念 I/O&#xff08;input/output&#xff09;也就是输入和输出&#xff0c;在冯诺依曼体系结构当中&#xff0c;将数据从输入设备拷贝到内存就叫作输入&#xff0c;将数据从内存拷贝到输出设备就叫作输出。 对文件进行的读写操作本质就是一种 IO&#xff0c;文…

近邻算法详解:原理、Java实现及应用场景

摘要 近邻算法&#xff08;Nearest Neighbor Algorithm&#xff09;是一类基于实例的学习方法&#xff0c;广泛应用于分类和回归问题中。最常见的近邻算法是K近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;&#xff0c;其基本思想是通过计算待分类样本与训练样本的…

内网渗透-详解代理逻辑及隧道

写在前面 红蓝对抗过程中打点以后往往需要进行内网渗透和横向移动&#xff0c;因此大家都需要扎实掌握代理和隧道知识&#xff0c;一款优秀的代理工具也可以给内网渗透带来很大的收益。 1.正向代理&#xff1a; 代理客户端&#xff0c;帮助客户端完成所需请求。 举例&#x…

系统架构设计师【第6章】: 数据库设计基础知识 (核心总结)

文章目录 6.1 数据库基本概念6.1.1 数据库技术的发展6.1.2 数据模型6.1.3 数据库管理系统6.1.4 数据库三级模式 6.2 关系数据库6.2.1 关系数据库基本概念6.2.2 关系运算6.2.3 关系数据库设计基本理论 6.3 数据库设计6.3.1 数据库设计的基本步骤6.3.2 数据需求分析6…

梵几 x TapData:如何高效落地实时数据中台,助力家居企业优化数字营销

使用 TapData&#xff0c;化繁为简&#xff0c;摆脱手动搭建、维护数据管道的诸多烦扰&#xff0c;轻量代替 OGG、DSG 等同步工具&#xff0c;「CDC 流处理 数据集成」组合拳&#xff0c;加速数据流转&#xff0c;帮助企业将真正具有业务价值的数据作用到实处&#xff0c;将“…

【FISCO BCOS 3.0】一、新版本搭链介绍

目录 一、区块链种类的变化 二、搭链演示 1.单群组区块链&#xff08;Air版本&#xff09; 2.多群组区块链&#xff08;Pro版本&#xff09; 3.可扩展区块链&#xff08;Max版本&#xff09; FISCO BCOS的发展速度如日中天&#xff0c;对于稳定的2.0版本而言&#xff0c;偶…

【【手把手教你实现Risc-V装载至FPGA】】

RiscV实现教程 参考来源 tinyriscv: https://gitee.com/liangkangnan/tinyriscv 平台实现 &#xff1a; Linux ubuntu 实现介绍 环境 &#xff1a; 需要 iverilog (切换到 v11或以上的版本&#xff09; 1.下载iverilog源码 git clone https://github.com/steveicarus/iverilog.…

zookeeper启动(一)

1.zookeeper启动入口 在zkServer.sh的启动命令中,我们可以找到zookeeper启动的关键类org.apache.zookeeper.server.quorum.QuorumPeerMain QuorumPeerMain#main 我们可以直接看org.apache.zookeeper.server.quorum.QuorumPeerMain中的main方法,从下面的main方法中,我们可以…

收银系统源码-千呼新零售2.0【线上商城商品详情页细节优化】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货等连锁店使用。 详细介绍请查看下…

媳妇面试了一家公司,期望月薪20K,对方没多问就答应了,只要求3天内到岗,可我总觉得哪里不对劲。

“20k&#xff01;明天就来上班吧&#xff01;” 听到这句话&#xff0c;你会不会两眼放光&#xff0c;激动得差点跳起来&#xff1f; 朋友媳妇小丽&#xff0c;最近就经历了这样一场“梦幻面试”。然而&#xff0c;事情的发展却远没有想象中那么美好…… “这公司也太好了吧…

python udp双向通信

import json import socket import threading import loggingthislist [] thisneednum {}class ChatUdpMain:def __init__(self):#其他原有逻辑 begin#其他原有逻辑 end# 1.创建socket套接字 收self.udp_socket_receive socket.socket(socket.AF_INET, socket.SOCK_DGRAM…