Git 如何撤回已 Push 的代码

news2024/10/5 17:26:52

在日常的开发过程中,我们广泛利用Git进行版本控制。然而,有时我们可能会误将错误的代码推送到远程仓库,或者希望在本地返回到先前的某个版本以重新进行开发。
就像我个人的经历一样,我曾推送了一些我认为未来会非常有用的优化方案到线上,但随后又接到了一个紧急的新需求。由于项目的关键性,未经测试的方案不能轻易上线。为了响应新需求,我需要先撤销之前推送的优化方案。
目前我的分支状态如下,我的目标是在本地和远程仓库中都回退到"第四次提交"这一部分。
在这里插入图片描述

方法一、手动删除

对于错误代码较少的情况,通过与想要恢复到的commit进行对比,然后手动删除错误代码是一种有效的方法。只需按住ctrl键选择两个commit,然后点击Compare Versions,即可轻松删除错误代码。这种方法在代码较为简单时非常实用,甚至可以通过再次对比确保代码一致性。
在这里插入图片描述

然而,对于代码较为复杂的情况,对比删除可能变得困难。尤其是涉及到配置文件时,这可能会让人感到困扰。

此外,使用这种方法会保留错误提交的记录,对于追求完美的开发者来说,这可能是一个问题。幸运的是,Git提供了一套更为优雅的操作流程来解决这个问题。

方法二、分支重置

选择你想要重置的分支,选择将当前分支重置到此处,如果是英文则是Reset Current Branch to here
在这里插入图片描述
这时候会跳出四个选项供你选择,我这边选择的是硬模式,也就是hard模式,对于这四种模式,我下面有详细的介绍,如果没有需要可以直接使用硬模式即可
在这里插入图片描述
我们可以看到,第四次提交和第三次提交已经变成白色的了,而且dev分支的标签指向的是第二次提交。
在这里插入图片描述
经过上述操作,本地错误提交的commit已被清除。然而,远程仓库中的提交仍保持原状。为了将本地状态同步到远程仓库,需要删除那些commit。在push界面中,尽管没有新的commit需要提交,但我们需要执行强制推送(Force Push)操作,以确保本地状态推送到远程仓库。
在这里插入图片描述
需要注意的是对于一些被保护的分支,这个操作是不能进行的。需要自行查看配置,一般来说master分支和main分支都是保护分支。我们可以在设置-》版本控制-》git-》推送中查看到

在这里插入图片描述
我们在git上看,dev分支已经还原到第二次提交的这个版本,第三次提交和第四次提交都没了。
在这里插入图片描述

Git Reset 四个参数介绍

这四种模式对应着git reset的四种参数,git官方的文档说明如下

  1. Soft: git reset --soft

Does not touch the index file or the working tree at all (but resets the head to , just like all modes do). This leaves all yourchanged files “Changes to be committed”, as git status would put it.

说明:这将重置索引,但保留工作目录中的文件。这意味着你可以在本地继续编辑文件,而不会丢失已经做出的修改。如果你想回退到某个提交,但同时保留在工作目录中的修改,那么可以使用这个模式。

  1. Mixed: git reset --mixed

Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action.

说明:这与 soft 模式类似,但还会清除HEAD指针。这意味着你的本地提交将被丢弃,但你可以继续编辑文件。如果你想丢弃本地的更改,但同时保留在暂存区的更改(还没有添加到索引),那么可以使用这个模式。

  1. Hard: git reset --hard

Resets the index and working tree. Any changes to tracked files in the working tree since are discarded. Any untracked files or directories in the way of writing any tracked files are simply deleted.

说明:这将重置索引和工作目录,并丢弃所有更改。所有的工作都将丢失,相当于你在特定提交的基础上重新开始工作。如果你想丢弃所有的更改,包括工作目录中的文件和暂存区的更改,那么可以使用这个模式。

  1. Keep: git reset --keep

Resets the index and updates the files in the working tree that are different between and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between and the index has unstaged changes, reset is aborted.

说明:这实际上是一个变体,用于处理Git 2.23及更高版本中引入的合并提交的回退。它尝试保留在重置点之后的所有提交,但丢弃在重置点之前的所有提交。

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

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

相关文章

14:00面试,14:05就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到12月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…

SQL进阶理论篇(十一):什么是MVCC?

文章目录 简介什么是MVCC快照读与当前读悲观锁的问题示例参考文献 简介 在MySQL中,默认的隔离级别是可重复读,可以解决脏读和不可重复读的问题,但不能解决幻读问题。如果想要解决幻读问题,就需要采用串行化的方式,通过…

数据结构——【万字文章+配图+代码】带你深入理解二叉树

1. 二叉树的概念 二叉树是一种有限集合,由根和左右子树构成,每个结点最多有两棵子树,且这两棵子树具有顺序关系 2. 二叉树的特殊情况: 2.1 满二叉树: 一个二叉树,如果每次的结点都达到最大值&#xff…

07-Eventing及实践

1 Knative Eventing的相关组件 Knative Eventing具有四个最基本的组件:Sources、Brokers、Triggers 和 Sinks 事件会从Source发送至SinkSink是能够接收传入的事件可寻址(Addressable)或可调用(Callable)资源 Knative S…

二维码智慧门牌管理系统升级解决方案:房屋管理

文章目录 前言一、一站式服务二、全方位管理三、未来展望四、智慧解决方案 前言 科技带来智慧生活 随着科技的不断发展,智能化已经成为我们生活的重要组成部分。二维码智慧门牌管理系统是这一趋势中的关键工具之一。除了提供标准地址服务外,该系统还为房…

全栈开发中的安全注意事项:最佳实践和工具

安全性是当今数字环境中最重要的问题,而在全栈开发中这一点尤为重要。当企业努力创建强大且动态的应用程序时,他们必须应对复杂的安全威胁领域。在本文中,我们将探讨开发人员可以用来确保安全的全栈开发环境的最佳实践和工具。 1.1 全栈开发的…

电脑软件:推荐一款非常实用的屏幕截图软件

目录 一、功能介绍 二、软件特色 三、常用快捷键 四、软件总结 五、软件下载 FastStone Capture是一款功能强大的屏幕截图软件,它可以帮助用户轻松地捕获屏幕上的任何区域,并将其保存为各种格式的图像文件。以下是关于FastStone Capture软件的一些详…

小信砍柴的题解

目录 原题描述: 时间:1s 空间:256M 题目描述: 输入格式: 输出格式: 样例1输入: 题目大意: 主要思路: 注意事项: 总代码: 原题描述&#…

59. 螺旋矩阵 II(java实现,史上最详细教程,想学会的进!!!)

今天来分享一下螺旋矩阵的解题思路及代码的实现。 题目描述如下: 首先拿到这道题,首先不要慌张,我们来仔细分析一下会发现并没有那么难。 首先看下边界的元素是1、2、3递增的,那么我们也许可以根据这一点先把边界的元素一个一个给…

上下界取min/max的线段树问题:P8518 [IOI2021] 分糖果

https://www.luogu.com.cn/problem/P8518 没有要求在线,显然离线(。维护时间戳,上线段树。 好了,我们现在知道一个人的曲线变化了。怎么做呢? 前面所有碰上下界的都是没用的!我们只需要找最后一段的时间…

TrustZone之顶层软件架构

在处理器中的TrustZone和系统架构中,我们探讨了硬件中的TrustZone支持,包括Arm处理器和更广泛的内存系统。本主题关注TrustZone系统中发现的软件架构。 一、顶层软件架构 下图显示了启用TrustZone的系统的典型软件栈: 【注意】:为简单起见,该图不包括管理程序,尽管它们可…

【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)

系列文章目录 身躯已然冰封,灵魂仍旧火热 本文由睡觉待开机原创,未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 文章目录 系列文章目录前言题目链接(有需要…

计算机组成原理——数制与编码

1.在以下编码中,零的表示唯一的是(C) A.反码 B.原码 C.补码 D.原码和移码 2.假设某数的真值为-100 1010B,在计算机内部表示为1011 0110B,该数采用的编码为(D) A.移码 B.原码 C.反码 D.补码 3.…

Linux shell编程学习笔记36:read命令

目录 0 前言1 read命令的功能、格式、返回值和注意 1.1 命令功能1.2 命令格式1.3 返回值1.4 注意事项2 命令应用实例 2.1 一次读入多个变量值2.2 不指定变量名2.3 测试read命令的返回值2.3 指定输入时限并进行相应处理2.4 -t 指定结束符2.5 -n 指定输入字符个数2.6 -N 指定输入…

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现AOA-SVM算术优化支持向量机的数据分类预测…

css的filter全属性介绍

原图: 模糊(blur) 单位可为px或rem,值越大,越模糊 filter:blur(3px) filter:blur(0.3rem) 亮度(brightness) 值可为数字或百分数,小于1时,亮度更暗;等于1时,无变化&am…

微信支付怎么申请0.2费率

作为移动支付的主流方式,微信收款和支付宝为商家带来了便利的同时,每笔交易都要收取的0.6%收款手续费也成为商家的负担。现在使用现金支付的人少之又少,为了给顾客带来便捷的购物体验,所以即便是要付出手续费&#xff…

十四、YARN核心架构

1、目标 (1)掌握YARN的运行角色和角色之间的关系 (2)理解使用容器做资源分配和隔离 2、核心架构 (1)和HDFS架构的对比 HDFS架构: YARN架构:(主从模式) &…

visual stdio code运行vue3

npm init vuelatest 该命令初始化vue项目 使用visual stdio code创建vue项目 ,这边是vue-project文件夹 vs code打开项目 vscode操作vue项目 vscode操作vue项目

【Leetcode】旋转矩阵

题目链接:https://leetcode.cn/problems/rotate-matrix-lcci/description/ 题目描述 给你一幅由 N N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。 不占用额外内存空间能否做到? 示例 …