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 ,旧的提交记录在前面
(没有输出就是成功,如果出现异常可以看看下面的问题和解决)
查看:
(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
更多推荐
所有评论(0)