git reset
git reset [--soft | --mixed | --hard] [HEAD]
--mixed
重置 HEAD 和索引 (默认,可以不用带该参数)
--soft
仅重置 HEAD
--hard
重置 HEAD, 索引和工作区(注意:使用--hard
时,请确保工作区已提交或备份,否则会销毁工作区数据无法恢复)
$ git reset –hard HEAD~1 # 回退上一个版本
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 以此类推...
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD~2 上上一个版本
- HEAD~3 上上上一个版本
- 以此类推...
取消暂存某个文件:
git reset HEAD~1 e/e.txt # 执行后可以使用 git status 查看,git add -A 再次添加到暂存
压缩提交历史:
$ git log --oneline
f95d7bd (HEAD -> master) e.txt v3
3b36804 e.txt v2
7696faf e.txt v1
7367670 create e.txt
...
$ git reset --soft 7367670
$ git log --oneline
7367670 (HEAD -> master) create e.txt
...
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: e/e.txt
$ git commit -m "e.txt v1,v2,v3"
[master 52b6c18] e.txt v1,v2,v3
1 file changed, 1 insertion(+)
$ git log --oneline
52b6c18 (HEAD -> master) e.txt v1,v2,v3
...
更多参考:
Git-工具-重置揭密
git reset 命令