git 怎么回退已经push的版本_git push 操作代码回退_南山有爱的博客-程序员宅基地

技术标签: git 怎么回退已经push的版本  

(1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚.

(2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚.

这些开发中很常见的问题,所以git的取消提交,回退甚至返回上一版本都是特别重要的.

大致分为下面2种情况:

1.没有push

这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题,准备取消提交,用到下面命令

reset

git reset [--soft | --mixed | --hard

上面常见三种类型

--mixed

会保留源码,只是将git commit和index 信息回退到了某个版本.

git reset 默认是 --mixed 模式

git reset --mixed  等价于  git reset

--soft

保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

--hard

源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

当然有人在push代码以后,也使用 reset --hard 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上commit,index都没有变,当你把本地代码修改完提交的时候你会发现权是冲突.....

所以,这种情况你要使用下面的方式

2.已经push

对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

revert

git revert用于反转提交,执行evert命令时要求工作树必须是干净的.

git revert用一个新提交来消除一个历史提交所做的任何修改.

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)

revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

通常,前几位即可

git revert c011eb3

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit

看似达到的效果是一样的,其实完全不同.

第一:

上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.

第二:

如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.

第三:

reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36008052/article/details/112015305

智能推荐

CCF中学生计算机程序设计(入门篇)答案_空明.缥缈的博客-程序员宅基地_ccf中学生计算机程序设计

CCF中学生计算机程序设计(入门篇)//P11(3) #include<iostream> #include<cmath> using namespace std; int main() { cout<<"正方形的边长是"<<sqrt(10*8-16)<<"cm"<<endl; return 0; }欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学

io学习:1.标准io与文件io_财务码农小老板的博客-程序员宅基地

一、标准io与文件io的区别1.缓存区 (这是哪本书里写的来,忘记了。一定要找到!!!贴原图)标准io的缓存类型(APUE): 全缓存:在填满标准I/O缓冲区后才进行实际的I/O操作; 行缓存:当输入输出中遇到换行符时,标准I/O库执行I/O操作 无缓存:vi -t FILE 结果如下:typedef struct _IO_FILE FILE;Ctrl + ] 追索源码如下:struc

以太坊2.0? 亲历3天的Devcon我看到了这样一个以太坊 | 见闻录_区块链大本营的博客-程序员宅基地

有人说,区块链最大的应用就是发行 Token 和开会。作为从业者,这一年多下来,我也参加过许多会议。但深深觉得以太坊 Devcon 是区块链技术行业中最高水平的会议,这场会议指明了以太坊2.0的发展规划与路径,这是一场纯粹的技术会议,参与者都是有高度技术信仰的程序员与自由主义者。在区块链的各种大会中,以太坊的 Devcon 是最为技术最为权威的,没有之一。今年的 De...

Koobee S306 变砖恢复教程-酷比手机,估计已经倒闭了_背蜗牛的锅的博客-程序员宅基地

Koobee S306 变砖恢复教程电源+音量加:进recovery,不建议换recovery,这个手机配置没必要换最新的系统版本,用官方的就行; 电源+音量减:进Factory Mode,基本没啥用之所以写这个教程是因为以下原因:1,网上教程不完善2,有些人在网上发布,还收费,尤其是那个山炮叔叔,真是山炮3,另外一个重要原因是我给弄坏的必备条件:1,电脑一台(我用的WIN8亲测成功使用),最好配置JAVA环境2,数据线一根3,Koobee S306 手机一台4.

HarmonyOS(鸿蒙)真机签名获取(详细教程)_Cool_breeze_bin的博客-程序员宅基地

HarmonyOS真机签名1.准备(1).将HarmonyOS手机通过数据线连接电脑(2).[登录/注册华为开发者账号](https://developer.harmonyos.com/cn/)(3).已安装DevEco-Studio2.签名步骤(1).打开IDE创建一个工程(2).设置自己创建的工程信息(3).找到Build > Generate Key and CSR并点击,按下图逐步操作即可(4).进入[AppGallery Connect](https://developer.huawei.c

随便推点

ios开发和android开发浅谈_C__Roach的博客-程序员宅基地

从事了两年多的android开发,刚转ios一个多月,于是就简单地对这一个多月的学习说一下体会,在这里主要讨论的是两者的区别。1.语言 (java&Object_C)       先从语言本身来说,java的语法设计绝对比Object_C优秀很多,这也是java为什么如此受欢迎的原因,java相比于Object_C来说绝对是容易上手很多,[]式的消息发送机制是一种古老的语法,正因如此App

Turtle库的学习积累_weixin_30311605的博客-程序员宅基地

1.什么是turtle库Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。2.turtle绘制图像基础2.1画布: 画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。 ...

Dronekit使用串口在Win10下控制pixhawk飞控教程_NaiveWizard的博客-程序员宅基地

(一)Dronekit 环境搭建DroneKit-Python是一个用于控制无人机的Python库。DroneKit提供了用于控制无人机的API,其代码独立于飞控,单独运行在机载电脑或其他设备之上,通过串口或者无线的方式经由MAVLink协议与飞控板通信。亦可在自行编译SITL模拟器上进行测试。英文手册网址:https://dronekit-python.readthedocs.io/en/latest/about/index.html代码网址:https://github.com/dronekit/

SerialESP8266wifi ESP8266 Arduino库_DaveBobo的博客-程序员宅基地

SerialESP8266wifi一个简单的ESP8266 Arduino库,内置重新连接功能。ESP8266是一个便宜的wifi模块。我得到了我的约2.50美元,包括在Aliexpress送货。 请阅读此处:https://nurdspace.nl/ESP8266AT命令参考可以在这里找到:https://github.com/espressif/esp8266_at/wiki/AT_...

【Java Swing探索之路系列】之三:Java Swing布局管理器组件_郭孝星的博客-程序员宅基地

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell一 BorderLayoutBorderLayout是一种简单的布局策略,可以将其看作一个组件。它把容器分为东、南、西、北、中5个区域,每个组件将占据某个区域。而 这5个区域分别被命名为NORTH,

C++数据库编程 ODBC连接SQL Server数据库_超级大洋葱806的博客-程序员宅基地_odbc sql server

文章目录1. ODBC编程一般步骤2. 连接步骤3. 代码示例1. ODBC编程一般步骤配置数据源初始化环境拼接SQL语句执行SQL语句遍历结果集释放ODBC连接官方文档:Microsoft 开放式数据库连接 (ODBC) - SQL Server | Microsoft Docs2. 连接步骤头文件需要包含以下头文件#include<Windows.h>#include <sql.h> #include <sqlext.h> #inc

推荐文章

热门文章

相关标签