背景
如果提交了代码,却发现有不需要提交的文件。这时候如何修改呢?可以用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 上上一个版本
- 以此类推…
操作实例
git reset --mixed
如下例子,我们在add a.txt和b.txt后,发现并不需要提交b.txt,就可以使用git reset b.txt命令来撤销提交该文件,且该文件内容保持不变,存在工作区
JiuWuyou@ABC MINGW64 /d/Code/test
$ git init
Initialized empty Git repository in D:/Code/test/.git/
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ touch a.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ touch b.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git add a.txt b.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
new file: b.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git reset b.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
b.txt
git reset --soft
如下例子,我们在提交c.txt后想撤销本地提交,同时保留本次提交的文件改动,就可以使用git reset --soft 0f6893dbb命令来撤销提交,并恢复c.txt到工作区,0f6893dbb为上一次commit的ID
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git log
commit 0f6893dbbeebed8aee62e4ed5c5089420a08fff0 (HEAD -> master)
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date: Mon Nov 4 11:02:23 2024 +0800
提交a和b文件
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ touch c.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git add c.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: c.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git commit -m"提交c文件"
[master c00c6d7] 提交c文件
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 c.txt
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git log
commit c00c6d78169835438da2c602d9dba9985ee6b18d (HEAD -> master)
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date: Mon Nov 4 11:05:42 2024 +0800
提交c文件
commit 0f6893dbbeebed8aee62e4ed5c5089420a08fff0
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date: Mon Nov 4 11:02:23 2024 +0800
提交a和b文件
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git reset --soft 0f6893dbb
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git log
commit 0f6893dbbeebed8aee62e4ed5c5089420a08fff0 (HEAD -> master)
Author: JiuWuyou <JiuWuyou@dias.com.cn>
Date: Mon Nov 4 11:02:23 2024 +0800
提交a和b文件
JiuWuyou@ABC MINGW64 /d/Code/test (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: c.txt
相比上述例子,如果不需要保留c.txt就可以使用git reset --hard 0f6893dbb命令。同时–mixed与–soft的区别是--soft 会保留所有更改在索引中,而 --mixed 会将更改保留在工作目录中,但不会保留在索引中。选择哪种模式取决于你想如何处理 HEAD 指向的提交之后的更改。
6781

被折叠的 条评论
为什么被折叠?



