git 撤销已提交的代码、恢复因git reset --hard造成的文件丢失

撤销已提交的代码可以使用以下三种方式:

  • git reset --soft HEAD^(撤销commit动作):保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区 (推荐);
  • git reset --mixed HEAD^ (撤销commit、add动作): reset 如果不加参数 那么默认使用–mixed 参数 。它的行为是:保留工作目录 并且清空暂存区. 也就是说 工作目录的修改、暂存区的内容以及由reset所导致的新的文件的差异,都会被放进工作目录。
  • git reset --hard HEAD^ (撤销并舍弃版本号之后的提交记录): 执行reset后需要强制推送push到远程,该操作会重置stage区和工作目录,没有commit的修改会被全部丢失,即,工作目录里的新改动和已经add到stage区的新改动全部丢失(慎用!)

 

如果你add了很多的文件到暂存区,但是只commit了其中的已部分文件,然后进行 git reset --hard HEAD^ 回退操作,那你就会发现工作区、暂存区的文件都消失或被覆盖,没错你的努力一下子就人间蒸发了一样,此时别慌,赶紧抢救一下吧。

抢救方式如下:

  1.如果 git reflog 可以找到拥有丢失的文件的版本,可以直接git reset 版本号 回退

  2.首先输入git fsck --lost-found 然后到项目的 .git/lost-found 文件夹里可以找回部分或者全部的文件 ( git fsck --lost-found 可以通过一些神奇的方式把曾经add到暂存区过的文件以某种算法算出来加到   .git/lost-found 文件夹里,直接去文件夹里找便可以找到丢失的特殊文件)

  

   3.Git的子树合并 

 

posted @ 2022-05-17 20:15  不如饲猪  阅读(4237)  评论(0编辑  收藏  举报