[转]恢复 git reset -hard 的误操作
转帖: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 的误操作的更多相关文章
- 恢复 git reset -hard 的误操作
有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(re ...
- 恢复git reset --hard之前尚未push的commit提交
1.在.git/logs/refs/heads/下有所有分支的操作记录及commit号,可以找到commit提交所在那个分支名称: 2.搜索commit提交的标题,就可以看到相应的记录,包括id号: ...
- windows无法执行 git reset head^版本回退操作的正确打开方式
^是cmd.exe的escape字符,属于特殊字符,命令里要用到文字 ^ 时必须用双引号把它夹起来,因此只要如下就可以正确执行: git reset head"^"或者git re ...
- git学习(十) idea git reset 操作
git reset 是回滚操作,在 idea 中使用如下: Reset Type 有三种: Mixed 默认方式,只保留源码,回退 commit 和 index 信息 Soft 回退到某个版本,只回退 ...
- 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: ...
- Git误操作 git reset强制回滚 恢复commit方法
参考: 找回Git中丢失的Commit Git误操作 git reset强制回滚 恢复commit方法 使用Git时,常有误操作,在Commit之后又执行了git reset --hard HEAD强 ...
- git操作——git pull 撤销误操作,恢复本地代码
需求 开发的代码还未commit到git本地仓库,就从git远程仓库上pull了代码,导致开发的代码直接被冲掉,需要退回到上一个版本代码. 操作 进入到项目git本地仓库文件夹下 打开cmd窗口,执行 ...
- Git版本恢复命令reset(转载)
本博文转载自:http://www.tech126.com/git-reset/: 如果看不懂的话,请在git下练习,如果练习后任然有不懂的,可以留言也可以发送邮件到luoquantao@126.co ...
- git 学习笔记 —— 切换和恢复提交版本( git reset/reflog/tag 命令)
记录一下关于 git 不同提交版本间切换的操作以及如何恢复至切换之前的版本. 切换到之前提交的版本 —— git reset --hard 笔者在使用 git 时,首先接触到了一个"黑魔法& ...
随机推荐
- C++中的数组越界
C++中数组发生越界错误时, compiling过程不会报错, linking过程也不会报错, 会在executing过程中发生意想不到的错误或问题.
- Oracle 添加第二个实例 和 监听
1.添加第二个实例 配置和移植工具 -->Database Configuration Assistant 然后一步一步创建实例(实例名为ORCL2) 创建成功后会在系统的服务里面有个服务名称为 ...
- ES6中块作用域之于for语句是怎样的?
在ES6中新加了快作用域的概念(C语言就有,作为类c语言的js,当然应该加上),算是很好理解. { let i; } console.log(i);// i is not defined 在代码块当中 ...
- Android中的Service小结
简介 Service适合执行不需要和用户交互,而且长期运行的任务.即使程序被切换回后台,服务仍然可以正常运行.Service并不自动开启线程,默认运行在主线程中. Service中需要重载的函数 on ...
- android学习之ListView
移通152余继彪 该组件用于显示列表的view 包含了三个关键元素 listView 适配器 以及数据,适配器主要是用于将数据映射到listview,适配器数据主要是有hasmap 配合list对每 ...
- HDU 1405
题意: 输入一个数n,输出它的素因子与这个素因子出现的次数. 分析: 用欧拉函数,变下形就好了,不再过多解释. 代码如下: #include <iostream> #include < ...
- UIButtonTypeSystem backBarButtonItem
当UIButton是UIButtonTypeSystem类型时,改变UIButton的frame,系统会有一个动画改变效果,不想要这个效果,将类型改为UIButtonTypeCustom. backB ...
- C++多线程1
一个多线程的实例 #include "stdafx.h" #include <windows.h> DWORD __stdcall Func(LPVOID pm) { ...
- spring入门教程——笔记
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- Windows 10 RTM 官方正式版
Windows 10 各版本区别: Windows 10 家庭版:供家庭用户使用Windows 10 专业版:供小型企业使用 在家庭版基础上增加了域账号加入.bitlocker.企业商店等功能Wind ...