不小心merge后的回滚操作

虽然有四个方法,但我们项目中使用方法一和二比较合适,不会产生新的commit,并且简单粗暴

方法一,新分支覆盖

①首先两步保证当前工作区是干净的,并且和远程分支代码一致方法一,删除远程分支再提交

$ git co currentBranch
$ git pull origin currentBranch
$ git co ./

②备份当前分支(如有必要)

$ git branch currentBranchBackUp

③恢复到指定的commit hash

$ git reset --hard resetVersionHash //将当前branch的HEAD指针指向commit hash

④删除当前分支的远程分支

$ git push origin :currentBranch
$ //或者这么写git push origin --delete currentBranch

⑤把当前分支提交到远程

$ git push origin currentBranch

方法二,强制push远程分支

①首先两步保证当前工作区是干净的,并且和远程分支代码一致

②备份当前分支(如有必要)

③恢复到指定的commit hash

$ git reset --hard resetVersionHash

④把当前分支强制提交到远程

$ git push -f origin currentBranch

方法三,从回滚位置生成新的commit hash

①首先两步保证当前工作区是干净的,并且和远程分支代码一致

②备份当前分支(如有必要)

③使用git revert恢复到指定的commit hash,当前分支恢复到a>3版本(见下图)

a)此方法会产生一条多余的commit hash&log,其实1c0ce98和01592eb内容上是一致的

b)git revert是以要回滚的commit hash(1c0ce98)为基础,新生成一个commit hash(01592eb)

$ git revert resetVersionHash

④提交远程分支

$ git push origin currentBranch

方法四,从回滚位置生成新的分支merge

①首先两步保证当前工作区是干净的,并且和远程分支代码一致

②备份当前分支(如有必要)

③把当前工作区的HEAD指针指向回滚的commit hash(注意不是branch的HEAD指针)

Notice:这个时候工作区HEAD没有指向分支,称为匿名分支detached HEAD

这个时候提交commit后无法保存状态,git中的任何提交必须是在当前工作区HEAD所在分支的HEAD上进行push hash入栈,所以HEAD必须是属于某个分支的HEAD位置,提交才生效。

$ git co resetVersionHash

④以该commit hash创建一个新的分支

$ git co -b newRevertedHash

⑤切换到当前分支,合并newRevertedHash。

$ git co currentBranch
$ git merge newRevertedHash

⑥进行代码diff,完成代码回滚,push到远程currentBranch

Notice: 也可以直接hotfix,从要回滚的地方直接重新打包一个新tag包,发版本hotFixVersion即可。

文章来源:git如何正确回滚代码

原文地址:https://www.cnblogs.com/tiktok/p/9531723.html

时间: 2024-10-09 13:18:56

不小心merge后的回滚操作的相关文章

Git撤销&回滚操作

开发过程中,你肯定会遇到这样的场景: 场景一: 糟了,我刚把不想要的代码,commit到本地仓库中了,但是还没有做push操作! 场景二: 彻底完了,刚线上更新的代码出现问题了,需要还原这次提交的代码! 场景三: 刚才我发现之前的某次提交太愚蠢了,现在想要干掉它! 撤销 上述场景一,在未进行git push前的所有操作,都是在"本地仓库"中执行的.我们暂且将"本地仓库"的代码还原操作叫做"撤销"! 情况一:文件被修改了,但未执行git add操作

jenkins实现生产环境部署文件的回滚操作

由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一键从测试环境发布到正式环境的工具,部署的大致思路如下(详细的操作点这里,有详细节点配置和部署配置): 前提:安装jenkins的环境为master,每一个生产环境为slave,slave是实时连接到master的. 1.测试环境上使用了CCNET进行每次的代码变更编译部署,在测试环境上进行编译的版本

SQL的事务回滚操作带案例分析

SET XACT_ABORT on BEGIN TRAN INSERT INTO [PDA_Action] VALUES ('采购入库1') INSERT INTO [PDA_Action] VALUES ('采购入库2') SELECT 1/0  /* 除数为0错误 */ INSERT INTO [PDA_Action] VALUES ('采购入库3') INSERT INTO [PDA_Action] VALUES ('采购入库4') COMMIT TRAN 对于有select的语句的回滚,

K8S的名称空间创建&&版本的升级、回滚操作(回滚到指定版本)

创建一个私有仓库. #运行一个registry容器 [[email protected] ~]# docker run -tid --name registry -p 5000:5000 --restart always registry:latest #在所有需要使用私有仓库的的节点上进行以下配置: [[email protected] ~]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H un

Analysisbinlog 分析及回滚操作介绍

Analysisbinlog是我在学习binlog event结构及存储的时候,为了更深入理解写的一个对binlog的分析工具,基于python2.7开发,相较于mysqlbinlog工具显示简化很多,可以分析可以对row数据生成回滚语句,可定位组合有下面几个: Thread_id Position范围 时间范围 GTID Position 范围 + thread_id/gtid 时间范围 + thread_id/gtid 显示效果如图: 精简了对我们没多大用的数据,只显示执行语句.GTID.P

sourceTree回滚操作

1.点击log的回滚提交 会回滚选中的记录(本地和git上都会回滚) 见下图 2.重置到当前分支:目前研究出来的结果为修改的是本地的分支,回滚完成后点击拉取等于没有回滚(git远程没有回滚),该方法适用于没有本地回滚即没有提交到远程服务器的回滚 见下图

C#代码启用事务锁Transaction进行一系列提交回滚操作

一.前言 因为很多人一般进行一系列相关数据库操作都是在存储过程里面,而且在存储过程用锁的写法也是很简单的,在这篇文章主要介绍一下C#后台代码用锁进行一系列事务操作,我建立一个简单的winform程序,然后做一个事务:修改指定ID的用户信息,然后新增一名用户信息,操作成功就提交事务,程序异常和数据库执行不成功都必须回滚事务! 二.存储过程的事务 写得比较简单,我想大家都知道怎么使用了,不懂的可以问我. 三.C#代码的事务 1.封装一个事务类,里面有事务的创建.提交事务.回滚事务和销毁事务的方法 p

manjaro系统的回滚操作

作为linux系统的爱好者,自从使用linux后,就喜欢追求新的软件,连系统都换成了滚动升级的版本.manjaro基于arch linux,同时也是kde的支持系统,升级非常频繁.使用了几年,很少碰到升级系统刮掉的情形,但是这次升级后出现了: [developDss nication]# pacman -Syyu:: 正在同步软件包数据库... core 151.7 KiB 353 KiB/s 00:00 [########################] 100% extra 1782.6

git回滚操作

git log查找历史记录 注意: 使用前7位数字 git reset --hard commit_id 回滚至commit_id对应的代码 从回滚状态拉取最新的代码 git pull