下面方法只针对当你本地代码做了 git add 或则 git commit 后又手贱的重置本地代码到上一个版本,导致本地代码丢失的情况。

如果你没有 git add 命令,而直接 git reset --hard 了,抱歉,代码估计找不回来了。


一,第一种情况 git commit 后重置代码

1,在所在代码文件路径下执行 git reflog 这样就能看到所有的 commit 后的记录。

e294e2a HEAD@{5}: commit: 处理冲突
2d6c4d7 HEAD@{6}: commit (merge): 修改冲突
98e1316 HEAD@{7}: commit: 作业,听力训练和单词训练
aecbb45 HEAD@{8}: pull: Fast-forward

2,如果你很幸运的找到了上次提交的记录,执行 git reset --hard 后面加上 commitID (e294e2a)就可以找回丢失的代码。


二,第二种情况 git add 后重置代码

1,首先 执行 find .git/objects -type f | xargs ls -lt | sed 38q命令, 这样是找到你最近38次git add的记录。38是可以修改的,根据你自己需求修改。

jennydeMacBook-Pro:lestudy jenny$ find .git/objects -type f | xargs ls -lt | sed 38q
-r--r--r-- 1 jenny staff 1717 7 8 10:14 .git/objects/c3/7f638a7ec2475aaf87345075c7a4dad7529bcb
-r--r--r-- 1 jenny staff 1553 7 8 10:14 .git/objects/c2/0726da956cb092d980300915f714d686caaeb1
-r--r--r-- 1 jenny staff 1732 7 8 10:14 .git/objects/5a/c8f3317822a12e8c9596b2896d3968e08003c6
-r--r--r-- 1 jenny staff 1880 7 8 10:14

2,使用git cat-file -p xxxx > 1.md 命令保存add记录对应的代码,其中xxxx是前面通过 find ....命令找到的add文件路径。

需要从 .git/objects/ 开始截取后面的所有路径,并且在截取后的路径,去掉其中的 / 斜杠来组成新的路径。

比如,.git/objects/c3/7f638a7ec2475aaf87345075c7a4dad7529bcb 截取后的就是 c3/7f638a7ec2475aaf87345075c7a4dad7529bcb,然后去掉斜杠就是c37f638a7ec2475aaf87345075c7a4dad7529bcb

最后执行 git cat-file -p c37f638a7ec2475aaf87345075c7a4dad7529bcb > 1.md命令,那么git就会把此条记录所对应的代码保存到 1.md 中。后续你根据代码修改文件名称即可。本次你的代码就找回了。

总结,没事不要 git reset --hard ##

git 找回 git reset --hard HEAD 后的代码的更多相关文章

  1. git reset --hard HEAD^后显示more?的原因及如何解决

    在windows的cmd控制台下操作git,想要回滚到上一次提交,但是输入git reset --hard HEAD^后就显示more? fatal: ambiguous argument 'HEAD ...

  2. Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )

    在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...

  3. Git学习01 --git add, git commit , git log ,git status, git reset --hard, head

    Git官方提供的快速入门教程:https://try.github.io/levels/1/challenges/1 特点:Git极其强大的分支管理:分布式版本 集中式版本控制系统,版本库是集中存放在 ...

  4. git add.后回退 代码丢失

    记录一次操作git丢失代码的过程: 写完代码后:git staus git add. git status 发现有一堆.class 文件不想提交,想着代码回退到add 之前,使用了 git log 开 ...

  5. Git操作: git commit代码后,如何撤回且保留commit的代码

    git commit代码后,但是没有push之前,如果发现提交的代码有一个部分是有问题的,或者commit message写的太随便了想改一下,以下命令会帮到你 git reset HEAD^ 敲击该 ...

  6. [Git] Github上传新repository后自动合并

    原因是新repository中有个与老repository一模一样的名字为".git"的隐藏文件夹,删去后即可: 将整个工程直接复制粘贴出此错误...好蠢: Github控制项目的 ...

  7. 我的Git教程 之 解决 git clone后无代码

    解决 git clone 后无代码 前言:这个教程只适用于像我一样大致理解Git的原理,但是不太记得住Git命令的同学使用.所以具体原理只会提一下,具体可以参见Pro Git. 在另一篇 简明的教程  ...

  8. Git命令之回退篇 git revert git reset

    Git command之回退篇 欲练回退 必先了解:HEAD.index.WorkingCopy HEAD: 当前所在的分支版本顶端的别名,也就是最新的一次commit. git commit 之后与 ...

  9. git 执行 git reset HEAD 报 Unstaged changes after reset

    Unstaged changes after reset 解决的办法如下2中办法: 1. git add . git reset --hard   2. git stash git stash dro ...

随机推荐

  1. SqlAlchemy操作(一)

    博客转载于 http://www.cnblogs.com/haiyan123/p/8270520.html 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB ...

  2. perl(ExtUtils::Embed)依赖包

       perl(ExtUtils::Embed) 被 ****需要    yum install perl-ExtUtils-Embed即可

  3. Python 将字典的元素按照键或者值的大小进行排序

    在开发的过程中有时遇到这样的需求,一个字典里保存了一份完整的数据,其中键是一个id,值是时间,需要获取最新的5条数据,处理方式如下: 假设字典数据的变量名为my_dict data_list = so ...

  4. hdoj1072 Nightmare(bfs)

    题目大意: 在迷宫中有一个炸弹,过六个单位时间就会爆炸,要你求一个起点到迷宫的终点的最短距离,迷宫中有时间重置器,当你走到这个格子,炸弹的爆炸时间重新置为0,迷宫中标识为墙壁的格子不能走,到达任意一个 ...

  5. IntelliJ IDEA配置maven3.3.3+mybatis3.1.1

    注:本文参考了孤傲苍狼关于MyBatis学习总结,在此表示感谢,原文链接为http://www.cnblogs.com/xdp-gacl/p/4261895.html. 1.新建project,勾选c ...

  6. [JS深入学习]——数组对象排序

    (转) JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject. ...

  7. MongoDB系统CentOS 7.1 crash的排障过程

    [作者] 王栋:携程技术保障中心数据库专家,对数据库疑难问题的排查和数据库自动化智能化运维工具的开发有强烈的兴趣. [问题描述] 最近我们有多台MongoDB的服务器CentOS 7.1系统发生了cr ...

  8. 《JAVA与模式》之合成模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

  9. Sip协议

    会话初始协议.SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的(请求应答的通讯模式).微信采用了自主研发的SYNC协议,他通过“握 ...

  10. php内核为变量的值分配内存的几个宏

    在php5.3之前,为某变量分配内存是用宏 MAKE_STD_ZVAL; 737 #define MAKE_STD_ZVAL(zv) \ # /Zend/zend.h738 ALLOC_ZVAL(zv ...