[GIT]辨析/区别: git reset HEAD 与 git reset --hard HEAD | 版本回撤
1 场景1: 撤销到远程仓库或本地仓库的最新最近一次的正式版本
1.1 文由
时常有这样一种场景,不小心改动了部分文件,或修改了部分文件却发现无用,此时可能还没有git push,也可能push了;又可能commit了,或者还没有commit。
此时,我们想撤销(git reset)到远程仓库或本地仓库的最新最近一次的正式版本中来。那么,怎么做?
1.2 解决方案/辨析

[情况1(个人常用)] git reset --hard <HEAD/CommitId/Tag>
git reset --hard HEAD
# 回退/撤销。回退到最近一次的COMMIT版本上(即 【当前版本/撤销到倒数第1个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
git reset --hard HEAD~1 或 git reset --hard HEAD^
# 回退/撤销。回退到上一次的COMMIT版本上(即 【上一版本/撤销到倒数第2个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
git reset --hard HEAD~2 或 git reset --hard HEAD^^
# 回退/撤销。回退到上上次的COMMIT版本上(即 【上上版本/撤销到倒数第3个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
...
git reset --hard HEAD~99 或 git reset --hard HEAD^...^(99个'^')
# 回退/撤销。回退到上上次的COMMIT版本上(即 【撤销到倒数第100个COMMIT版本】);将工作区、暂存区和HEAD保持一致。
[情况2]
git reset HEAD
# 回退/撤销。将暂存区和HEAD的提交保持一致
[情况3]
git checkout <filename/branch/tag>
# 替换/覆盖本地改动。
# 将使用HEAD指针所指的最新内容替换工作目录中的文件;已添加到暂存区(含:新建文件)的改动不会受影响[git add -A xx 以后]。
[情况4]
git fetch origin
git reset --hard origin/<remoteBranchName>
# 丢弃在本地的所有改动与提交(commit),可到服务器上获取最新的版本。
2 场景2: 回撤本地提交代码 git reset --hard <commitId> | git reset --soft<commitId>
两种方式:不清除本地提交、清除本地提交
2.1 场景:回退到上次提交,并清除本地提交的代码 | 本地仓库的本地代码回退到指定的远程仓库版本
- step0 查看提交日志记录
git log
- step1 回退本地仓库的本地分支到指定版本
git reset --hard <HEAD/commitId/branch/tag>
- [可选步骤] step2 强制推送到远程仓库的分支
git push -f
(或 git push origin <HEAD/commitId/branch/tag> --force)
2.2 场景:回退到上次提交,不清除本地提交的代码
例如:在
main分支写了半天,然后git commit提交了 ,才发现 在main分支开发的。
- step0 查看提交日志记录
git log
- step1 回退到上次提交,不清除本地提交的代码
git reset --soft <HEAD/commitId/branch/tag>
这样,刚刚提交的就又回到本地的
local changes列表中。
- [可选步骤] step2 强制推送到远程仓库的分支
git push -f
(或 git push origin <HEAD/commitId/branch/tag> --force)
5 补充2:git stash
在git reset回退操作前,如果你修改的有效内容较多时(避免白干活...),可尝试使用此命令解决。在git reset后,再git stash pop即可还原先前的修改内容。


X 参考文献
- (推荐) git reset HEAD 与 git reset --hard HEAD的区别 - 简书
- (推荐) [Git]解决GIT冲突问题:git pull failed - 千千寰宇/博客园
- [GIT]指定分支下创建分支 - 千千寰宇/博客园
- 远程仓库版本回退 - 简书
- Git撤销本地commit - CSDN
- SVN:取消对代码的修改 - 推荐/CSDN
# svn revert
# svn revert [-R] filePath/DirPath
[GIT]辨析/区别: git reset HEAD 与 git reset --hard HEAD | 版本回撤的更多相关文章
- 代码回滚:git reset、git checkout和git revert区别和联系
git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...
- Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别
Git安装配置及常用命令 0 Git本地分支管理 1 Git远程分支管理 2 Git Tag标签管理 3 Git Log日志 4 其它高级命令 5 常规使用及介绍 6 角色权限 7 分支定义 8 一般 ...
- Svn与Git的区别
把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点,上手会很容易,声明一点Git并不是目前唯一的分布式版本 ...
- centos6 和centos7 安装git 的区别
centos6 和centos7 安装git 的区别 centos6安装git yum install curl-devel expat-devel gettext-devel openssl-dev ...
- git reset --hard和git revert命令
git reset --hard和git revert命令 git误操作时可以用git reset –hard 去撤销这次修改, 但是这样做也有问题,可能在之前本地有没有提交的修改也都消失了, ...
- svn 和 git的区别
1.速度: 克隆一份全新的目录,以同样拥有五个(才五个)分支来说,SVN是同时复製5个版本的文件,也就是说重复五次同样的动作.而Git只是获取文件的每个版本的元素,然后只载入主要的分支(master) ...
- svn和git的区别及适用场景
svn和git的区别及适用场景 来源 https://blog.csdn.net/wz947324/article/details/80104621 svn的优势: 优异的跨平台支持,对windows ...
- 【Git】git clone与git pull区别
从字面意思也可以理解,都是往下拉代码,git clone是克隆,git pull 是拉.但是,也有区别: 从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是 ...
- 话说Svn与Git的区别
这篇主要是谈谈两者的区别,至于谁优谁劣看官自己思考吧! 把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点 ...
- svn git 的区别(别再问我了)
这篇主要是谈谈两者的区别,至于谁优谁劣看官自己思考吧! 把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点 ...
随机推荐
- idea :不支持发行版本11问题
1.因为我是导入的其他人的项目来进行修改的,所以遇到了这个问题 2. 3. 4.
- FCC 中级算法题 Everything Be True
Everything Be True 所有的东西都是真的! 完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真.函数返 ...
- VUE相关面试题目01
一.MVVM是什么; MVC: MVVM的描述: 常见库实现数据双向绑定的效果: 发布订阅模式; ...
- JVM调优学习笔记
TODO:需要学习的命令 jps jstat -gcutil pid xxxx jmap histo:live pid
- 微信小程序 图片预览 wx.previewImage
官网地址: go官网 效果展示: list: [ 'http://img5.imgtn.bdimg.com/it/u=3300305952,1328708913&fm=26&gp=0. ...
- 5.3dmax轴相关
# 知识点: 转换为可编辑的样条线(spline) chamfer 切角 Fillet 圆角 车削命令 书柜案例2 样条线(从图形到多边形) 1.在平面视图中选择矩形并创建一个矩形,将矩形转化为可编辑 ...
- 修改密码 MVC
控制器site public function actionPassword(){ $model = new PasswordForm(); /*判断请求属性 if ($request->isA ...
- unity 普通项目转URP项目
1.导入UniversalRP (PackageManager 导入)2.创建Pipeline Asset creat-->Rendering-->UniversalRender ...
- maven常用镜像源
<mirrors> <mirror> <id>ibiblio</id> <mirrorOf>central</mirrorOf> ...
- 解决com.alibaba.excel.exception.ExcelGenerateException: Can not close IO.
我在使用easycel导出到zip包中时,出现了这个问题.各种文件输出时产生的问题其实大同小异 查看了一些网上的文章,还有github上关于此bug的issue,总算是理清并解决了. 解决方法一 主要 ...