git reset 回退版本(版本穿梭)
1. 前言
git reset 命令用于回退到指定版本,是 git 的 “后悔药”
如果创建了一个新的文件,这个文件是未跟踪的状态,那么使用 reset 回退版本时,这个新文件不会受到影响
如果创建了一个新的文件,并且这个文件已被跟踪(已被提交到暂存区),那么使用 reset 回退版本时,这个新文件就会被删除
2. 回退类型
指针移动的时候,暂存区,工作区都不动。重置 git commit
git reset --soft [commit id]
指针移动的同时,重置暂存区,但是工作区不动。重置 git commit、git add
git reset --mixed [commit id]
指针移动的同时,重置暂存区和工作区。重置 git commit、git add 和工作副本的修改
git reset --hard [commit id]]
使用示例: 回退到指定版本
# 命令格式
git reset --hard <commit id>
# commit id 使用完整的值或前 7 位都可以
git reset --hard 75e24ff
git reset --hard 75e24ff4f6da07bfd300fc6b4249914b9958634c
3. 测试回退类型
先准备好一个用来测试的仓库,第一次提交只有一个 1.txt 文件,第二次提交新增一个 2.txt,以此类推,提交五次
修改 1.txt、2.txt,创建 6.txt、7.txt,将 2.txt、7.txt 提交到暂存区(当前处于最新的一次提交中)
vim 1.txt
vim 2.txt
touch 6.txt 7.txt
git add 2.txt 7.txt
--soft
参数只会重置 commit,不会重置 add 和工作区副本的修改
工作区: 修改了已被 git 跟踪的 1.txt,不会重置它的文件内容。6.txt 是新文件,它的状态也不会改变,还是未跟踪状态
暂存区: 暂存区中的 2.txt 修改状态和 7.txt 的新文件状态保留
版本库: 因为 3.txt、4.txt、5.txt 是之后当前版本才加入版本库的,git 重置 commit 后自动将它们放到了暂存区
--mixed
参数会重置 commit 和 add ,不会重置工作区副本的修改
其实就是在 --soft
参数的基础上,又重置了 add 操作
--hard
参数会重置 commit 和 add ,也会重置工作区副本的修改
其实就是在 --mixed
参数的基础上,又重置了文件的修改。在后面版本跟踪的文件,也会被删除,比如: 3.txt、4.txt、5.txt、7.txt
4. HEAD 的用法
回退到当前版本,下面两种用法等价 (放弃所有修改)
git reset --hard
git reset --hard HEAD
回退到上一个版本
git reset --hard HEAD^
回退到上上一个版本
git reset --hard HEAD^^
5. 回退远程库版本
本地库回退版本
git reset --hard <commit id>
-f, --force
将本地库版本强制推送到远程库(必须加 -f 参数)
git push -f origin <branch>
相关文章
- git的pull和fetch区别_git pull和git clone
- git拉取代码如何解决冲突_git拉取代码如何解决冲「建议收藏」
- pycharm如何配置git_网络设备配置基础实训总结
- git常用设置
- Git的下载方法+版本控制器以及SVN与GIT的区别
- tortoisegit使用教程_git小乌龟拉取代码
- Git删除本地分支_idea删除git分支
- Mac OS中Git版本更新(亲测有效)
- GIT分布式版本控制系统 | 命令讲解入门
- git指令速查
- 简单的git教程
- git clone出现 fatal: unable to access ‘https://github.com/…’的解决办法(亲测有效)
- git-版本更改
- 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )
- 【Git】Git 分支管理 ( 创建并切换分支 git switch -c dev | 切换分支 git switch dev )
- 【Git】Git 分支管理 ( 解决分支合并冲突 | 创建并切换分支 git switch -c feature1 | 修改 feature1 分支并提交 | 修改 master 主版本并提交 )
- 【Git】Git 分支管理 ( 解决分支合并冲突 | 前置环境准备 | 远程仓库发起分支合并 | 在远程仓库解决分支冲突 | 在远程仓库正式合并分支版本 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )
- Git和SVN之间的几个基本区别详解架构师
- Linux下快速启动Git使用(linuxgit启动)
- 化界面Linux下Git的图形化使用指南(linuxgit图形)
- 极速学习:Linux下使用Git的基础知识(linux如何使用git)
- 如何在 Git 中重置、恢复,返回到以前的状态
- 如何在 Ubuntu 上安装最新版本的 Git
- 轻松玩转Git:Linux环境下的版本管理(linux下使用git)
- 如何在Linux上轻松部署Git?(linux下部署git)
- labLinux服务器上快速部署Gitlab系统(linux部署git)
- 常用的数十个 Git Tips
- 让Oracle支持Git(oracle中的git)