转帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964

有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如删除一个分支,

我都担心数据丢失。

不 久之前,我在做一些大动作(rebasing)之前,我总是备份整个版本库,以防万一。直到最近我才发现git的历史记录是不可修改的,

也就是说你不能更改任何已经发生的事情。你做的任何操作都只是在原来的操作上修改。也就是说,即使你删除了一个分支,修改了一个提交,

或者强制重置,你仍然可以回滚这些操 作。

让我们来看一些例子:

$ git init

$ touch foo.txt

$ git add foo.txt

$ git commit -m "initial commit"

$ echo 'new data' >> foo.txt

$ git commit -a -m "more stuff added to foo"

你现在看git的历史记录,你可以看到两次提交:

$ git log

* 98abc5a (HEAD, master) more stuff added to foo

* b7057a9 initial commit

现在让我们来重置回第一次提交的状态:

$ git reset --hard b7057a9

$ git log

* b7057a9 (HEAD, master) initial commit

这看起来我们是丢掉了我们第二次的提交,没有办法找回来了。但是 reflog 就是用来解决这个问题的。简单的说,它会记录所有HEAD的历史,

也就是说当你做 reset,checkout等操作的时候,这些操作会被记录在reflog中。

$ git reflog

b7057a9 HEAD@{0}: reset: moving to b7057a9

98abc5a HEAD@{1}: commit: more stuff added to foo

b7057a9 HEAD@{2}: commit (initial): initial commit

所以,我们要找回我们第二commit,只需要做如下操作:

$ git reset --hard 98abc5a

再来看一下 git 记录:

$ git log

* 98abc5a (HEAD, master) more stuff added to foo

* b7057a9 initial commit

所以,如果你因为reset等操作丢失一个提交的时候,你总是可以把它找回来。除非你的操作已经被git当做垃圾处理掉了,一般是30天以后。

转载于:https://www.cnblogs.com/mr-totoro/p/5785642.html

[转]恢复 git reset -hard 的误操作相关推荐

  1. mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复

    一.开启binlog. 首先查看binlog是否开启 mysql> show variables like "log_bin"; +---------------+----- ...

  2. git reset(回退add操作)

    在git的一般使用中,如果发现错误的将不想提交的文件add进入index之后,想回退取消,则可以使用命令:git reset HEAD <file>...,同时git add完毕之后,gi ...

  3. git reset 怎么还原_git reset –hard后的恢复操作

    先说下我遇到的问题和解决办法,然后再放原文. 我遇到的问题 在初始化一个比较大的项目时,由于最后一次commit的文件数量较大,无法成功push,百度无果后想要撤回这次commit,于是手贱用了git ...

  4. git reset命令详解

    开门见山,先抛出一张图,之后再细讲.  首先,先解释下图中的一些名词.  一.名词解释 1. Working Copy:当前工作目录下的文件,一般指,有修改,没有git add,没有git commi ...

  5. Git的撤销操作 git reset HEAD -- <file>

    在项目中我们也经常会使用到撤销操作 使用这一节我们就讲一讲Git的撤销操作 撤销操作主要有如下几种 git commit   --amend        撤销上一次提交  并讲暂存区文件重新提交 g ...

  6. git eclipse 取消误操作 ignore(忽略)文件

    ignore是忽略的意思,每个项目中都有生成.xxxx没用的文件,通常为了不免提交可以选择ignore这个文件. git eclipse中取消误操作的 ignore 文件,在被ignore文件夹的同级 ...

  7. git reset 怎么还原_git reset –hard误操作,如何恢复数据

    今天遇到了个糗事,git commit后push时,提示失败,有文档需要merge,excel文档无法用工具merge,反正都是我自己写的文档,所以根本就没想,直接执行了 git reset –har ...

  8. git reset 怎么还原_git reset --hard 操作后的数据恢复

    在进行正文之前先简单介绍下git reset 命令 git reset git reset 命令用于改变当前的仓库状态,简单的场景用例:假设一次修改了两个文件,然而需要对这两个文件分别进行两次提交,在 ...

  9. 如何使用'git reset --hard HEAD'恢复到之前的提交? [重复]

    本文翻译自:How do I use 'git reset --hard HEAD' to revert to a previous commit? [duplicate] This question ...

最新文章

  1. linux remote
  2. Python自动化开发学习13-堡垒机开发
  3. 面试必问:CPU 占用高,如何一击即中!
  4. java int.parse_java数据类型转换,parseXXX(String)或valueOf(String)有什么区别?
  5. 学习python有哪些优势
  6. 【英语学习】【WOTD】commemorate 释义/词源/示例
  7. HDU4035 Maze 【树形DP】【期望DP】
  8. Axure RP 9.0 软件安装教程
  9. 人体姿态识别代码深度解析,带你一步步理解代码
  10. Linux CentOS 服务器清理磁盘空间
  11. P1179 数字统计
  12. 对于路由地址并未切换,但是地址栏发生地址发生变化原因
  13. Ionic入门学习(一)
  14. 清末民初张家口地区服饰习俗变迁探研
  15. cadence基本操作
  16. Linux下不保存退出以及相关退出命令
  17. 大道至简——RISC-V架构之魂(上)
  18. 鸟哥的linux私房菜 第八章
  19. 关于 2022年数学建模美赛的一些总结
  20. ajax访问不到外部的变量,解决ajax方法内部不能给方法外部变量赋值的问题

热门文章

  1. 身材太好的女生在职场中有哪些劣势?
  2. 大家马致远是哪个朝代的,马致远作品赏析
  3. python入门——P51模块:模块内测试、搜索路径和包
  4. sql server 内存_SQL Server内存性能指标–第6部分–其他内存指标
  5. SQL Server Always On可用性组中的Windows故障转移群集仲裁模式
  6. 什么是SQL Server日志传送?
  7. 如何创建和配置SQL Server代理警报
  8. 给html元素绑定单击和双击事件
  9. texshop 使用技巧
  10. mysql function