测试背景
1.新建一个文件 README.md
写几行测试用的文本 如下:
提交到远程仓库
$ git add .
$ git commit -m 'add a text'
$ git push
2.修改这个文件 README.md
增加了内容(模拟修改) 如下:
再次提交到远程仓库 模拟错误提交 提交步骤如上
回退步骤
1. 使用命令 git log 文件名 查看该文件的提交日志
$ git log README.md
commit 00c9e47d7030685dc50b079b8cd640ec78657d38 (HEAD -> master, origin/master, origin/HEAD)
Author: XXXXXXXXXXXXXXXXXXXXX
Date: Sat Apr 10 22:01:51 2021 +0800
change txt
commit ede81898cad339f6dc4f537b3e52acf3667274d6
Author: XXXXXXXXXXXXXXXXXXXXX
Date: Sat Apr 10 21:49:54 2021 +0800
change readme.md
通过git log
的结果可以找到提交的版本号 例如:00c9e47d7030685dc50b079b8cd640ec78657d38
2.使用git reset 版本号 文件名 回退文件到指定版本号的版本
例如: 执行 git reset ede81898 README.md
$ git reset ede81898 README.md
Unstaged changes after reset:
M README.md
执行后回退命令(不带参数)后 查看当前状态
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md
发现回到了修改该完文件的时候,只是回退了提交的状态 提交后->提交前,本地还保留着回退之前的内容,此刻继续修改文件,修改完成后照常提交即可
3.使用git checkout -- 文件名 撤销本次修改
- 文件版本回退后 如果想撤销该文件的修改 使用命令
git checkout -- 文件名
注意文件名前必须有双横杠 - Git 2.23版本之后,增加了命令
git restore --staged <file>
也可以实现撤销文件的修改
补充知识点
- git reset --mixed:此为默认方式,不带任何参数的git reset,这种方式,它回退到某个版本,只保留源码,回退commit和index信息
- git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
- git reset --hard 彻底回退到某个版本,本地的源码也会变成为上一个版本的内容