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 参考文献

# svn revert
# svn revert [-R] filePath/DirPath

[GIT]辨析/区别: git reset HEAD 与 git reset --hard HEAD | 版本回撤的更多相关文章

  1. 代码回滚:git reset、git checkout和git revert区别和联系

    git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...

  2. Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别

    Git安装配置及常用命令 0 Git本地分支管理 1 Git远程分支管理 2 Git Tag标签管理 3 Git Log日志 4 其它高级命令 5 常规使用及介绍 6 角色权限 7 分支定义 8 一般 ...

  3. Svn与Git的区别

    把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点,上手会很容易,声明一点Git并不是目前唯一的分布式版本 ...

  4. centos6 和centos7 安装git 的区别

    centos6 和centos7 安装git 的区别 centos6安装git yum install curl-devel expat-devel gettext-devel openssl-dev ...

  5. git reset --hard和git revert命令

      git reset --hard和git revert命令   git误操作时可以用git reset –hard 去撤销这次修改, 但是这样做也有问题,可能在之前本地有没有提交的修改也都消失了, ...

  6. svn 和 git的区别

    1.速度: 克隆一份全新的目录,以同样拥有五个(才五个)分支来说,SVN是同时复製5个版本的文件,也就是说重复五次同样的动作.而Git只是获取文件的每个版本的元素,然后只载入主要的分支(master) ...

  7. svn和git的区别及适用场景

    svn和git的区别及适用场景 来源 https://blog.csdn.net/wz947324/article/details/80104621 svn的优势: 优异的跨平台支持,对windows ...

  8. 【Git】git clone与git pull区别

    从字面意思也可以理解,都是往下拉代码,git clone是克隆,git pull 是拉.但是,也有区别: 从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是 ...

  9. 话说Svn与Git的区别

    这篇主要是谈谈两者的区别,至于谁优谁劣看官自己思考吧! 把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点 ...

  10. svn git 的区别(别再问我了)

    这篇主要是谈谈两者的区别,至于谁优谁劣看官自己思考吧! 把第一条理解到位思想到位了做起来才会有的放矢,其他几条都是用的时候才能体会到 1) 最核心的区别Git是分布式的,而Svn不是分布的.能理解这点 ...

随机推荐

  1. idea :不支持发行版本11问题

    1.因为我是导入的其他人的项目来进行修改的,所以遇到了这个问题 2. 3. 4.

  2. FCC 中级算法题 Everything Be True

    Everything Be True 所有的东西都是真的! 完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真.函数返 ...

  3. VUE相关面试题目01

    一.MVVM是什么;      MVC:      MVVM的描述:           常见库实现数据双向绑定的效果:                     发布订阅模式;            ...

  4. JVM调优学习笔记

    TODO:需要学习的命令 jps jstat -gcutil pid xxxx jmap histo:live pid

  5. 微信小程序 图片预览 wx.previewImage

    官网地址: go官网 效果展示: list: [ 'http://img5.imgtn.bdimg.com/it/u=3300305952,1328708913&fm=26&gp=0. ...

  6. 5.3dmax轴相关

    # 知识点: 转换为可编辑的样条线(spline) chamfer 切角 Fillet 圆角 车削命令 书柜案例2 样条线(从图形到多边形) 1.在平面视图中选择矩形并创建一个矩形,将矩形转化为可编辑 ...

  7. 修改密码 MVC

    控制器site public function actionPassword(){ $model = new PasswordForm(); /*判断请求属性 if ($request->isA ...

  8. unity 普通项目转URP项目

    1.导入UniversalRP (PackageManager 导入)2.创建Pipeline Asset     creat-->Rendering-->UniversalRender ...

  9. maven常用镜像源

    <mirrors> <mirror> <id>ibiblio</id> <mirrorOf>central</mirrorOf> ...

  10. 解决com.alibaba.excel.exception.ExcelGenerateException: Can not close IO.

    我在使用easycel导出到zip包中时,出现了这个问题.各种文件输出时产生的问题其实大同小异 查看了一些网上的文章,还有github上关于此bug的issue,总算是理清并解决了. 解决方法一 主要 ...