回滚代码

简介: 回滚代码

回滚代码和核心命令有两个,一个是 reset ,一个是 revert ,从术语上讲, reset 是用来 回退 版本, revert 是用来 还原 某次或某几次提交。


reset基本使用

常规流程:

微信截图_20221208103452.png


注意

保护分支是不允许强制推送的,尽管你是项目 owner 也不行!通常 masterdevelopment 等分支为保护分支,要想通过 reset 来回滚,需要先将其 unprotect ,之后再强制提交。


上述流程的简写形式为:

$ git reset --hard HEAD^    # 回到上个版本
$ git reset --hard HEAD^^   # 回到上上个版本点击复制复制失败已复制


reset 对提交记录的影响

使用 reset 来回退版本在效果上就像是删除了一些提交。


例如,在 master 分支上有如下提交:

42eae13 (HEAD -> master) 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改点击复制复制失败已复制


如果发现,在第四次修改有错误,使用 reset 命令回滚到第三次修改,这个时候提交历史变成了:

97ea0f9 (HEAD -> master) 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改点击复制复制失败已复制


相当于我们删除了第四次修改的提交记录,(这里并不是物理删除,还是可以找回来的,具体命令可以查看git reflog


revert 基本使用

假设在 master 分支上有如下提交:

42eae13 (HEAD -> master) 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改点击复制复制失败已复制


第四次提交有一些问题,但是还有其他代码是不可放弃的,我们就需要用 revert 指令来保留第四次代码,同时恢复第三次修改。

$ git revert -n 97ea0f9
$ git commit -m "恢复第三次修改"点击复制复制失败已复制


此时的提交历史会变成:

33b8b30 (HEAD -> master) Revert "恢复第三次修改"
42eae13 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改点击复制复制失败已复制


实际上, Git 把第三次修改从提交中剔除(还原)了,还保留了第四次修改,并且产生了新的 commit_id

目录
相关文章
|
7月前
|
SQL API 数据库
Seata AT模式问题之抛出异常触发回滚如何解决
Seata是一款开源的分布式事务解决方案,旨在提供高效且无缝的分布式事务服务;在集成和使用Seata过程中,开发者可能会遇到不同的异常问题,本合集针对Seata常见异常进行系统整理,为开发者提供详细的问题分析和解决方案,助力高效解决分布式事务中的难题
598 14
|
XML Java 关系型数据库
Spring Boot 异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
Spring Boot 异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
2729 0
手动回滚、提交事务
手动回滚、提交事务
68 1
|
Java 关系型数据库 MySQL
Spring事务回滚的两种方法
当然,Spring事务回滚的前提是你当前使用的数据库必须支持事务,比如MySQL的Innodb是支持的,但Mysaim则是不支持事务的。
377 0
|
Java Spring
Spring事务异常不回滚的原因
Spring事务异常不回滚的原因
302 0
|
开发工具 git
git命令回滚撤销自己的错误覆盖提交
git命令回滚撤销自己的错误覆盖提交
121 0
SVN回滚代码时,提示冲突怎么办
SVN回滚代码时,提示冲突怎么办
91 0
SVN回滚代码时,提示冲突怎么办
|
SQL 数据库
源码解析Seata AT模式中分支事务的提交或回滚是如何被触发的
源码解析Seata AT模式中分支事务的提交或回滚是如何被触发的
352 0
源码解析Seata AT模式中分支事务的提交或回滚是如何被触发的
RM在seata AT模式中如何实现分支事务提交或回滚
RM在seata AT模式中如何实现分支事务提交或回滚
471 0
|
存储 Java 关系型数据库
我来出个题:这个事务会不会回滚?
我来出个题:这个事务会不会回滚?
177 0