一、撤销 add 操作
恢复到上次add操作之前:git reset HEAD(也可以直接git reset)
仅恢复某个文件:git reset HEAD 文件名
二、撤销 commit 操作
不删除工作空间改动代码,撤销commit,并且撤销add操作:
git reset HEAD^
不删除工作空间改动代码,撤销commit,不撤销add操作:
git reset --soft HEAD^
删除工作空间改动代码,撤销commit,撤销add操作: 该命令执行后本地改动的代码全部清空,直接回到上次执行commit命令的状态!
git reset --hard HEAD^
但还没push到远程:
-
本地仓库回滚
git log 查看节点
如:commit xxxxxxxxxxxxxxxxxxxxxxxxxx
Merge:
Author:
Date:
git reset commit_id 本地回滚
- git reset commit_id(回退到上一个 提交的节点(即目标版本号) 代码还是原来你修改的)
- git reset –hard commit_id (回退到上一个commit节点, 代码也发生了改变,变成上一次的)
-
远程仓库回滚:需要在本地仓库回滚的基础上,进行强制推送
git reset --hard 目标版本号
git push -f
-f 即强制推送,因为本地仓库在reset之后,版本比远程仓库低,普通推送无法推送,会报错,需要进行强制提交
三、撤销上次git操作
比如使用了 git reset --hard HEAD^ 命令,将改动的代码也删除了,需要恢复改动的代码 可以先使用 git log 查看操作记录,然后使用 git reset commit_id 回滚到对应节点。
四、删除最后一次远程提交
- 使用revert
$ git revert HEAD
$ git commit -m "注释"
$ git push origin master
使用revert 撤销某版本,但push远程仓库后,形成新的commit。所以先要执行git commit -m "注释",再执行git push origin master
- 使用reset
$ git reset --hard(或者soft) HEAD^
$ git push origin master -f
注释:如选择git reset --soft HEAD^ 本地的工作区最后修改还保留着。此时使用git push 那么远程仓库是上一次的版本。 所以在先前最新的commit记录就没有了