在撤销之前需要知道几个版本的表示方法:
版本 | 说明 |
HEAD | 当前版本,也是最后一次提交版本 |
HEAD~ | 当前版本的父版本,也是上一次提交版本 |
commit id | 其他版本号(32位的字符串) |
本文把撤销分成几个阶段,分别是add之前、add之后(commit之前)、commit之后
撤销add之前的修改:
$git restore <file>...
add 把工作区的代码添加到暂存区,restore 是撤销工作区的代码修改
撤销add之后的修改:
如果要保留修改,把代码从暂存区撤回工作区。
$git restore --staged <file>...
或
$git reset --mixed HEAD <file>... #可以简写为 $git reset <file>...
如果不保留修改
$git reset --hard HEAD <file>... 或 $git checkout -- <file>...
PS:如果要跨版本撤回,要把HEAD改为版本号
撤销commit 之后的修改:
撤回到add之后,也就是commit之前
$git reset --soft HEAD~
撤回到add之前
$git reset --mixed HEAD~
撤回到修改之前,即恢复了修改的文件。
$git reset --hard HEAD~
以上是按整个HEAD进行reset,如果只是要对某个文件进行reset,只要加上文件的路径。
$git reset --soft HEAD~ <file>...
$git reset --mixed HEAD~ <file>...
$git reset --hard HEAD~ <file>...
PS:如果要跨版本撤回,要把HEAD~改为版本号
撤销本地所有修改常用
撤销所有文件的修改(不算未进入版本控制的文件)
$ git reset --hard #实际是git reset --hard HEAD的简写
删除所有未进入版本控制的文件
$ git clean -fd
撤消到指定版本
情况一:退回到之前的那一个版本
$git reset --hard HEAD~
情况二:退回到任意版本,版本commitid为 a24s0...
$git reset --hard a24s0