git各种撤销方法

397 阅读2分钟

一、撤销 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到远程:
  1. 本地仓库回滚
git log 查看节点

如:commit xxxxxxxxxxxxxxxxxxxxxxxxxx
   Merge:
   Author:
   Date:
   
git reset commit_id    本地回滚
  • git reset commit_id(回退到上一个 提交的节点(即目标版本号) 代码还是原来你修改的)
  • git reset –hard commit_id (回退到上一个commit节点, 代码也发生了改变,变成上一次的)
  1. 远程仓库回滚:需要在本地仓库回滚的基础上,进行强制推送
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记录就没有了