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. PVE设置定时关闭、启动虚拟机

    shell中输入命令: crontab -e 进入对应cron 添加命令: 例如: 00 2 * * * pvesh create /nodes/pve/qemu/102/status/stop 00 ...

  2. JS样式获取的封装方法

    样式获取 style属性 只能获取标签内容style属性里面存在的一些样式 如果你需要获取对应的全局所有地方设置样式 我们就需要采用一些方法 getComputedStyle 方法属于window的方 ...

  3. 服务器安装node

    卸载步骤[未安装请忽略] 1.卸载npm sudo npm uninstall npm -g 2.卸载node yum remove nodejs npm -y 安装步骤 1.下载 wget http ...

  4. Java压缩音频视频工具类

    /** * TODO * * @author Administrator * @version 1.0 * @date 2021/11/5 16:55 */ public class vedio { ...

  5. 性能工具---JConsole基于JMX的可视化监视、管理工具

    与visualvm类似: JConsole: (Java Monitoring and Management Console),一种基于JMX的可视化监视.管理工具 VisualVM:(All-in- ...

  6. Iview Table 图片、超链接

    columns = [ { title: "照片", key: "attach_url", align:'center', width: 170, render ...

  7. 关于npm audit fix无法修复问题的解决办法

    这两天新建项目 使用npm install的时候一直出现这个错误,使用npm audit fix 无法修复. 查询解决办法: 可以使用淘宝镜像源,会自动修复,然后下载相关依赖包 解决方法如下: 1.使 ...

  8. Flink双流消费kafka合并数据,并包含滑动窗口、算子、输出到MySQL的示例

    Java示例 import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.fu ...

  9. python创建线程传参误区记录

    创建线程可以使用threading模块中的Thread子类: 其中Thread子类允许的参数如下: (self, group=None, target=None, name=None, args=() ...

  10. 灵感宝盒新增「线上云展会」产品,「直播观赏联动」等你共建丨RTE NG-Lab 双周报

    前言 哈喽各位开发者,「RTE NG-Lab 双周报」如期而至! 近两周,我们更新了一些新的实时互动场景和产品,也举办了代码实验室的第一次线下活动,与大家一起体验了声网最新的 4.0 SDK. 灵感宝 ...