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>
更新于:2个月前相关文章
- git 里的gitignore不生效的解决方案
- Git 常用命令
- git clean 命令详解
- git 常用命令
- git switch 命令详解
- git rebase 命令详解
- git commit 代码提交规范
- git status 查看状态文件名乱码
- git stash 命令详解(保存开发进度)
- git fetch 命令详解
- git merge 命令详解
- .git 目录结构内容解析
- git clone 拉取远程仓库
- git tag 命令详解
- git rm 从暂存区中删除内容
- git init 初始化仓库
- git checkout 命令详解
- git help 查看命令手册
- git add 命令详解
- git commit 命令详解