背景
如果提交了代码,却发现有不需要提交的文件。这时候如何修改呢?可以用git reset指令。
git reset用法解释
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset [HEAD]
实例:
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
--soft 参数用于回退到某个版本:
git reset --soft HEAD
实例:
$ git reset --soft HEAD~3 # 回退上上上一个版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hard HEAD
实例:
$ git reset --hard HEAD~3 # 回退上上上一个版本
$ git reset --hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
**注意:**谨慎使用 ---hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- 以此类推...
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- 以此类推...
操作实例
shell
JackChen@ABC MINGW64 /d/Code/test (master)
$ touch a.txt
[1]+ Done gitk --all
JackChen@ABC MINGW64 /d/Code/test (master)
$ git add a.txt
JackChen@ABC MINGW64 /d/Code/test (master)
$ git commit -m"add text"
[cat1 990152f6] add text
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
JackChen@ABC MINGW64 /d/Code/test (master)
$ git status
On branch cat1
Your branch is ahead of 'origin/cat1' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
JackChen@ABC MINGW64 /d/Code/test (master)
$ git log
commit 990152f6572a51ce37272bcef7879d3fe2a8f24b (HEAD -> cat1)
Author: JackChen
Date: Fri Jun 21 11:11:58 2024 +0800
add text
Change-Id: I0896f0513dd0c580a5c649ac18e8462ff00c3331
JackChen@ABC MINGW64 /d/Code/test (master)
$ git reset --soft 5399da1f4
JackChen@ABC MINGW64 /d/Code/test (master)
$ git status
On branch cat1
Your branch is up to date with 'origin/cat1'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: a.txt
JackChen@ABC MINGW64 /d/Code/test (master)
$ git commit -m"add text"
[cat1 f00c31c8] add text
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
JackChen@ABC MINGW64 /d/Code/test (master)
$ git reset 5399da1f4
JackChen@ABC MINGW64 /d/Code/test (master)
$ git status
On branch cat1
Your branch is up to date with 'origin/cat1'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.txt
nothing added to commit but untracked files present (use "git add" to track)