[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不是分布的.能理解这点 ...
随机推荐
- linux一些指令
一. 文件操作命令 查看当前目录下的文件或文件夹 详细查看ls –l 每列代表不同的意义: 第一列drwxr-xr-x 表示权限, n 其中第一个字符d表示 目录(可能有b-块 ...
- c++结对编程
|| |:--|:--| |Github项目|Github地址 |结对伙伴|伙伴地址1伙伴地址2 PSP表格 ||| |:--|:--|:--|:--| |PSP2.1|Personal Softwa ...
- Linux系列---【内存占用过高问题排查思路】
内存占用过高问题排查思路 1.使用top命令查看后台任务 按shift+M使应用按内存使用率排序,定位到第一个使用内存最高的应用,并找到对应的PID. 2.使用ps命令查看对应的pid对应哪个应用 p ...
- js中函数(方法)注释
原文链接:https://blog.csdn.net/tianxintiandisheng/article/details/103764074 实例 /** * @function 处理表格的行 * ...
- MySQL数据库封锁机制和事务隔离级别
参考: 数据库技术:MySql学习笔记之事务隔离级别详解 详解MySQL 数据库隔离级别与MVCC MySQL 事务&&锁机制&&MVCC 数据库系统原理 - MySQ ...
- datax-web踩坑记录
实习期间接触了两种ETL工具:kettle.datax 1.datax-web的安装 (跟着文档一步步来就好了) https://github.com/WeiYe-Jing/datax-web/blo ...
- 磊磊零基础打卡算法:day18 c++模拟哈希表来模拟散列表
5.21 哈希表 Hash表又称为散列表,一般由Hash函数(散列函数)与链表结构共同实现,与离散化思想类似. 一般要求:防止冲突,便于查询 模拟hash表: 拉链法:两个核心操作insert(),f ...
- MSVC-用于其他IDE的手工环境配置,手工提取
最近因为在使用Code::Blocks编程,遇到了MSVC编译的库,不愿意换VS,所以手工配置了MSVC路径.CB是有点老了,不像现在新的IDE都是自动搜索的,而且我又不会批处理orz. 这里面可 ...
- CAS无锁机制
1. 背景 传统Synchronized锁:悲观,如果没有获取到锁的情况下,会让当前线程变为阻塞的状态,释放CPU执行权,效率非常低. 乐观锁(自旋):本质上没有锁,没有死锁现象,而且效率比较高,不会 ...
- CH573 CH582 CH579蓝牙从机(peripheral)例程讲解二(广播内容修改)
在上一篇外设例程讲解中讲述了蓝牙从机的收发接口,这样可以快速的上手,那么接下来就讲解另一个重要设置,从机的广播. 在peripheral例程中,一直是以50ms的周期进行广播,使用手机软件扫描可以获取 ...