git 代码回滚 reset revert 详解 IDEA操作 4种reset区别
问题描述:
我们用 git 在单人或者多人开发的时候,有时候出现的 错误的提交 ,我们此时 撤销 之前的操作,回退、回滚 到之前的版本,这里总结了 2种方法:reset(删除错误提交) 和 revert(新建提交覆盖)
图解 reset 和 revert 区别
1.reset
删除错误的提交记录
reset :删除错误的提交记录,(用于回滚版本、合并简化多余的提交记录)
例如:回退到 version2
例如:将 HEAD 指针指向 version2 的版本,删除后面的版本
因为是退回到之前的版本,所以这个需要强制 push :
git push origin master:master -f
reset 有 4 中不同的类型,–hard、–soft、–mixed、–keep。上述介绍的是 --hard 强制类型,详情在拓展中了解。
2. revert
创建新的提交记录,覆盖错误版本
revert:以 version2 为基础新建提交记录,覆盖之前的错误的代码,但是错误的提交记录还在。
(用于回滚版本,并保存是哪个傻子提交了错误的代码的记录)
(方式1)git 命令行解决
1. reset
使用 reset 从 version4 回滚到 version2
不同版本的 README.md 文件如下
1.1.查看提交记录
GitHub 查看提交记录
本地提交记录
git log
1.2 reset 回滚到 version2
( de9cf03fb023a8ae6f294b31ae3f7ebfd6c0e0ad
是 version2 的版本号)
git reset --hard de9cf03fb023a8ae6f294b31ae3f7ebfd6c0e0ad
1.3 强制 push
git push origin master:master -f
GitHub 查看提交记录,目标版本之后的提交全部消失了
本地查看提交记录,目标版本之后的提交全部消失了
git log
2. revert
git revert
是建立新的提交,覆盖错误的版本,会记录下是那个傻子提交了错误的代码
目标:从 version4 回滚到 version2
2.1 查看目前版本
GitHub 查看
本地查看
git log
2.2 git revert
回滚
git revert -n de9cf03fb023a8ae6f294b31ae3f7ebfd6c0e0ad^..HEAD
-n 是代表不自动提交,只是将回滚的代码添加到,暂存区(效果类似
git add
),因为 revert 默认是回滚一个版本,如果自动提交,最后的代码会变成 verson1 – version2 – version3 – version4 – revert-to-version3 – revert-to-version2 会生成2个commit 记录,所以,一般都要使用 -n(也写作 --no-commit) 这个参数,更多信息可以参考文章后面的拓展链接HEAD 代表的是目前的状态缩写代表,同理于
298241a046a3781c73c169c933f5539e0e198351
^..
代表是范围 revert ,因为 revert 是一个一个 revert 的,格式是 OLD_COMMIT_ID^…NEW_COMMIT_ID ,旧的提交记录在前面理解 revert 多个提交
(没有输出就是成功,如果出现异常可以看看下面的问题和解决)
查看:
(1)查看文件,本地文件已经回滚到了 version2
2.3 提交文件
git commit -m "revert-to-version"
git push origin master:master
查看:
本地查看
git log
查看 GitHub
(方式2)IDEA 界面操作
其实 IDEA 这种图形化操作其实更方便,请确保你安装 Git 插件,
下面的操作都是将 version4 的版本回滚到 version2
1. reset
1.1 Alt + 9 查看 git Log
1.2 reset 回滚到 version2
右键单击 version2 记录,然后选择 Reset Current Branch to Here…
1.3 选择 Hard 模式
后面拓展会详细讲 4 中模式的区别
1.4 提交
hard 强制 reset 之后的结果如下
强制 push
因为你本地的 git 代码 的版本 version2 低于远程 version4 ,所以普通 push 会失败,这里只有强制 push
Ctrl + Shift + K push代码(也可以右键,选择 Git -> Repostory -> Push )
但是如果你像我一样看到 Force Push 是灰色的,应为IDEA 更新后不支持在 master 分支上 强制 push
来自 StackOverFlow:
As far as issue 85773 is concerned, that option shouldn’t be in the GUI yet (for IDEA 11-12 or 13+).
And it would be disabled when on the master branch.
但是你可使用命令强制 push
git push origin master:master -f
push 结束后在 GitHub 中看看
2. revert
我们回到最初的起点
2.1 Alt + 9 查看 Git Log
GitHub 的 Commit 提交记录
4.2 revert 重做 version2
右键单击 version2 记录,然后选择 Revert Commit
4.3 (重点) 选择 merge
选择 MERGE 你的本地的文件才会回到 version2 的版本,ACCEPT YOURS 不会回到之前版本
push 代码(因为你的代码的版本是递增的,不会删除已经推送到远程的分支,所以可以普通 push)
快捷键 Ctrl + Shift + K
查看 GitHub commit 记录
(拓展) 4 种 git reset
详解
可以参考这篇文章:Git Reset 三种模式 - 简书 (jianshu.com)
参考:
Git Reset 三种模式 - 简书 (jianshu.com)
(14条消息) Git恢复之前版本的两种方法reset、revert(图文详解)_游笑天涯-CSDN博客_git revert
常见问题和解决
1. git revert 错误
报错信息如下
# git revert -n de9cf03fb023a8ae6f294b31ae3f7ebfd6c0e0ad^..HEAD
README.md: unmerged (ae62d700d653021c24138215ac9f4e791a921b56)
README.md: unmerged (e5a4c368e4b9131d170893a69c8b69bf50438606)
README.md: unmerged (e9582e4fdfa9384de9e52e75c80ee42e5c8cc169)
error: your index file is unmerged.
fatal: revert failed
error: could not revert de9cf03… version2
git 代码回滚 reset revert 详解 IDEA操作 4种reset区别相关推荐
- linux git 删除分支,git 删除分支和回滚的实例详解
linux shell 的 git 删除分支和回滚的实例详解 git 删除分支和回滚的实例详解 [git 删除本地分支] git branch -D br [git 删除远程分支] git push ...
- mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解
前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...
- Git学习总结(19)——Git代码回滚总结
一.Git代码回滚分为两种情况,分别是push前回滚和push后回滚. 二.push前代码回滚 push前代码回滚使用reset命令,形如:git reset [--soft | --mixed | ...
- git 代码回滚_git代码版本管理(1)——git版本回滚
git代码版本管理(1)--git版本回滚 1.问题背景 在利用github.gitlab.Gitee等代码管理器中对代码的管理,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提 ...
- git代码回滚的几种方式
这还是第一次写关于git的文章,让我不由的想起了大学那会还没有接触到git时的如噩梦般的版本控制. 每次如果代码要有大的改动都要提前copy一份出来,最后以至于有多少次大的改动就有多少分文件,而且每一 ...
- git 代码回滚_能提交到远程的Git回滚
很多情况下我们需要回滚代码,最容易想到的就是git reset.但是git reset有个弱点,它是一个彻底的回滚,不能再提交给远程了,因为在提交记录里回滚点之后的记录都不见了. 做一下试验,一个文件 ...
- git 代码回滚_谁说用 Git 一定要用命令行?试试 SourceTree 吧
作者:邵磊http://juejin.im/post/59bc944d51882519777c5e07 整理:后端技术精选 前言 作为使用Sourcetree大于3年的我,已熟知git的每一个功能,并 ...
- git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作!
点击蓝色小字关注! 关注一下你就不会有bug!合并操作 相对于常规的 commit,当使用 git merge 合并两个分支的时候,你会得到一个新的 merge commit. 当我们 git sho ...
- idea中git代码回滚
第一步:找到VCS->Git->Show History 第二步:右键复制版本号: 第三步:找到 Git->Reset HEAD: Reset Type 有三种: mixed 默认方 ...
最新文章
- (转)Unity中武器与人物的碰撞检测
- 2016.01.19 UITextField
- python第三方库排行-Python模块汇总(常用第三方库)
- Fedora安装Nvidia显卡驱动方法
- 技术 KPI 的量化
- 如何将Windows 10帐户还原为本地帐户(在Windows Store劫持它之后)
- OpenLiberty:注入时出错,适用于TomEE和Wildfly
- python loggeru模块_python常用模块——logger模块
- Apple’s current market value is more than two trillion
- 如何在virtualenv环境中安装指定的python版本
- Git工程区域与文件状态
- 社交APP软件开发流程解析
- 【机器人算法】机器人动力学参数辨识
- TU-768与IT180A对比分析报告
- 人眼中的光 —— 光强,光通量,光照度,光亮度是什么
- TortoiseSVN安装失败——Please install the universal CRT first
- 场效应三极管及其放大电路(1)MOSFET详解
- 对页面上所有ajax的请求进行监听
- Java 校验注解的使用、自定义校验注解
- 利用c++与opencv将文本、图像加密进另一张图片中
热门文章
- IDEA代码警告(warning)整理以及解决办法
- 数仓维度建模之维度表技术基础
- 网商银行年营收139亿:净利20.9亿 蚂蚁集团持股30%
- 新网银行年营收26亿:净利9亿 远逊色于微众与网商银行
- MySQL之is not null, not in优化
- 分布估计算法java_数理统计8:点估计的有效性、一致最小方差无偏估计(UMVUE)、零无偏估计法...
- 计算机专业教育教育课程心得,教育信息技术2.0学习心得感悟
- Python-Django毕业设计葡萄酒销售管理系统论文(程序+Lw)
- [音乐欣赏]为你读诗背景音乐,音乐电台
- Android Activity生命周期一探究竟 及 主Activity里带Thread跳转时的注意事项