转帖: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天以后。

[转]恢复 git reset -hard 的误操作的更多相关文章

  1. 恢复 git reset -hard 的误操作

    有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(re ...

  2. 恢复git reset --hard之前尚未push的commit提交

    1.在.git/logs/refs/heads/下有所有分支的操作记录及commit号,可以找到commit提交所在那个分支名称: 2.搜索commit提交的标题,就可以看到相应的记录,包括id号: ...

  3. windows无法执行 git reset head^版本回退操作的正确打开方式

    ^是cmd.exe的escape字符,属于特殊字符,命令里要用到文字 ^ 时必须用双引号把它夹起来,因此只要如下就可以正确执行: git reset head"^"或者git re ...

  4. git学习(十) idea git reset 操作

    git reset 是回滚操作,在 idea 中使用如下: Reset Type 有三种: Mixed 默认方式,只保留源码,回退 commit 和 index 信息 Soft 回退到某个版本,只回退 ...

  5. git回退之git reset

    参考 https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E7%BD%AE%E6%8F%AD%E5%AF%86 https: ...

  6. Git误操作 git reset强制回滚 恢复commit方法

    参考: 找回Git中丢失的Commit Git误操作 git reset强制回滚 恢复commit方法 使用Git时,常有误操作,在Commit之后又执行了git reset --hard HEAD强 ...

  7. git操作——git pull 撤销误操作,恢复本地代码

    需求 开发的代码还未commit到git本地仓库,就从git远程仓库上pull了代码,导致开发的代码直接被冲掉,需要退回到上一个版本代码. 操作 进入到项目git本地仓库文件夹下 打开cmd窗口,执行 ...

  8. Git版本恢复命令reset(转载)

    本博文转载自:http://www.tech126.com/git-reset/: 如果看不懂的话,请在git下练习,如果练习后任然有不懂的,可以留言也可以发送邮件到luoquantao@126.co ...

  9. git 学习笔记 —— 切换和恢复提交版本( git reset/reflog/tag 命令)

    记录一下关于 git 不同提交版本间切换的操作以及如何恢复至切换之前的版本. 切换到之前提交的版本 —— git reset --hard 笔者在使用 git 时,首先接触到了一个"黑魔法& ...

随机推荐

  1. erlang 查看内存消耗的方法?

    找出消耗内存最多的进程 : lists:reverse(lists:keysort(2,[{P, erlang:process_info(P, heap_size)} || P <- erlan ...

  2. 简单研究Loader笔记

    2015-11-11 18:25:34 1. Loader是什么? /** * Static library support version of the framework's {@link and ...

  3. failed to open the runspace pool. the server manager winrm plug-in might be corrupted or missing

    添加对127.0.0.1的监听 netsh http add iplisten 127.0.0.01 添加完后的效果

  4. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  5. aspx文件为什么会慢

    你可以在 global.asax 的 Application_Start 方法中写一个日志,例如写 C# code   ? 1 2 3 4 5 void Application_Start(objec ...

  6. JavaScript之全局变量和隐式全局变量

    通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的. 无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的.

  7. clip:rect矩形剪裁

    clip:rect(top right bottom left);依据上-右-下-左的顺序提供自图片左上角为(0,0)坐标计算的四个偏移数值,其中任一数值都可用auto替换. 矩形剪裁 还需要绝对定位 ...

  8. canvas标签(1)--线条、矩形、圆形、文本、阴影、抛小球

    从网上扒拉的代码,敲了敲代码玩. html页面显示内容很简单,只要写个canvas标签,给他一个id写js就可以了 <!DOCTYPE html> <html> <hea ...

  9. C++ 四种类型转换

    在写代码中经常会有很多的隐式类型转换或显式类型转换. 对于隐式的类型转换主要是放生在赋值的时候,讲变量赋值给不同类型的变量的时候就会发生类型转换,如果是宽化转换(即从占字节少的类型向占字节多的类型转换 ...

  10. 理解python的with语句

    Python’s with statement provides a very convenient way of dealing with the situation where you have ...