【随笔】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.rhkb.cn/news/339420.html

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

相关文章

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

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

私有仓库搭建

目前市面上比较常见的私有仓库搭建方法为&#xff1a; 通过 Sinopia 或 verdaccio 搭建&#xff08;Sinopia 已经停止维护&#xff0c;verdaccio 是 Fork 自 Sinopia&#xff0c;基本上大同小异&#xff09;&#xff0c;其优点是搭建简单&#xff0c;不需要其他服务。通过 cnp…

代码随想录--哈希表--两数之和

题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 示例: 给定 nums [2, 7, 11, 15], t…

【JAVA SE】抽象类和接口

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;JAVA 个人主页&#xff1a;Celias blog~ 目录 引言 一、抽象类 1.1 抽象类的定义 1.2 抽象方法 1.3 抽象…

【vue实战项目】通用管理系统:作业列表

目录 目录 1.前言 2.后端API 3.前端API 4.组件 5.分页 6.封装组件 1.前言 本文是博主前端Vue实战系列中的一篇文章&#xff0c;本系列将会带大家一起从0开始一步步完整的做完一个小项目&#xff0c;让你找到Vue实战的技巧和感觉。 专栏地址&#xff1a; https://blog…

springboot 实现kafka多源配置

文章目录 背景核心配置自动化配置类注册生产者、消费者核心bean到spring配置spring.factoriesyml配置使用 源码仓库 背景 实际开发中&#xff0c;不同的topic可能来自不同的集群&#xff0c;所以就需要配置不同的kafka数据源&#xff0c;基于springboot自动配置的思想&#xf…

Centos 7下的VulFocus靶场搭建详细教程

一、靶场介绍 自带 Flag 功能&#xff1a;每次启动 flag 都会自动更新&#xff0c;明确漏洞是否利用成功。带有计分功能。兼容 Vulhub、Vulapps 中所有漏洞镜像。 二、下载安装 下载 VMware 软件下载 centos镜像 三、Docker知识 学习链接&#xff1a;https://www.runoob.c…

如何在路由器上安装代理服务:详细教程

如何在路由器上安装代理服务&#xff1a;详细教程 步骤一&#xff1a;通过漏洞进入路由器系统开启Telnet服务使用Telnet登录路由器系统查看系统信息和CPU信息步骤二&#xff1a;交叉编译MIPS程序 Go对MIPS的支持 安装TFTP Server使用BusyBox tftp传输文件在路由器系统中下载编译…

linux进程加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

四、.Net8对接Ollama实现文字翻译(.Net8+SemanticKernel+Ollama)本地运行自己的大模型

.Net8SemanticKernelOllama 一、Semantic Kernel官方定义SK能做什么&#xff1f; 二、基本使用1、普通对话2、使用插件实现文本翻译功能 三、IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService 很多情况都有这样的需求&#xff0c;使用自有系统…

运筹学_5.动态规划

文章目录 引言5.1 动态规划的基本概念首先明确什么是多阶段决策问题 5.2 动态规划的最短路径问题贝尔曼最优化原理建立动态规划模型的步骤 5.3 动态规划的投资分配问题投资分配问题定义投资分配问题的数学模型 5.4 动态规划的背包问题背包问题定义背包问题数学模型 引言 动态规…

Java——二进制原码、反码和补码

一、简要介绍 原码、反码和补码只是三种二进制不同的表示形式&#xff0c;每个二进制数都有这三个形式。 1、原码 原码是将一个数的符号位和数值位分别表示的方法。 最高位为符号位&#xff0c;0表示正&#xff0c;1表示负&#xff0c;其余位表示数值的绝对值。 例如&…

前端JS必用工具【js-tool-big-box】学习,检测密码强度

js-tool-big-box 前端工具库&#xff0c;实用的公共方法越来越多了&#xff0c;这一小节&#xff0c;我们带来的是检测密码强度。 我们在日常开发中&#xff0c;为了便于测试&#xff0c;自己总是想一个简单的密码&#xff0c;赶紧输入。但到了正式环境&#xff0c;我们都应该…

智能售货机的小投入大回报创业机遇

智能售货机的小投入大回报创业机遇 在当今这个快速进化的数字时代&#xff0c;智能售货机作为零售领域的新秀&#xff0c;正以其独特的便捷性和创新性逐步重塑传统零售格局。24小时不间断服务与自动化管理的结合&#xff0c;大幅度削减人力成本&#xff0c;使得智能售货机成为…

电脑突然提示:“failed to load steamui.dll”是什么情况?分享几种解决steamui.dll丢失的方法

相信有一些用户正在面临一个叫做“failed to load steamui.dll”的问题&#xff0c;这种情况多半发生在试图运行某个程序时&#xff0c;系统会提示一条错误消息&#xff1a;“failed to load steamui.dll”。那么&#xff0c;为何steamui.dll文件会丢失&#xff0c;又应该如何解…

Linux 使用 yum安装 ELK服务,yum 安装elasticsearch和Kibana(未写完)

文章目录 环境准备ELK组件介绍安装Elasticsearch安装Kibana 丢弃下载ELK 服务安装包Elasticsearch安装 Tips:关闭elasticsearch https修改 es 启动内存 环境准备 ELK组件介绍 ElasticSearch &#xff1a; 是一个近实时&#xff08;NRT&#xff09;的分布式搜索和分析引擎&…

Unity + 雷达 粒子互动(待更新)

效果预览: 花海(带移动方向) VFX 实例 脚本示例 使用TouchScript,计算玩家是否移动,且计算移动方向 using System.Collections; using System.Collections.Generic; using TouchScript; using TouchScript.Pointers; using UnityEngine; using UnityEngine.VFX;public …

python中的while循环

没有循环时&#xff0c;想打印0-100之间的数字&#xff0c;则需要循环多次&#xff0c;例&#xff1a; print(0) print(1) print(2) print(3) ... print(99) 但是使用循环的话&#xff0c;就不会有那么麻烦 while 循环 while 这个单词有“在……时”的含义&#xff0c;whil…

AI智能分析技术与安防视频融合当前面临的困难与挑战

人工智能与安防视频的融合为现代安全领域带来了革命性的变化&#xff0c;提高了安全管理水平、降低了管理成本并为用户提供了更加便捷和高效的服务。随着技术的不断进步和应用场景的不断拓展&#xff0c;未来人工智能与安防的融合将展现出更加广阔的发展前景。然而&#xff0c;…

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

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