文档章节

Git reset --hard 后的恢复

pior
 pior
发布于 2015/04/29 10:45
字数 486
阅读 204
收藏 0

惊魂一幕啊 

刚才执行了么这一系列的操作:

1,把最新写的代理commit到本地,没有push

2.reset --hard 到一个以前的版本.

回头一看....我去``刚提交的版本呢???

本来以为reset --hard只会把head标记带指定版本上, 分支不会变的, 结果分支也下来了`

最新版本就停在已提交到远程的版本上了....

这几天的提交都没了??!!

这可咋整...........

git log也看不到.....

git到底是什么鬼....

放狗搜了一下说--HARD 会删交提交...........

于是做了一下测试``

新提交一个版本``再reset --hard到以前的版本```是会删除之前的提交```

但是如果你在新提交的版本上再加一个分支```reset --hard后提交还是在的``因为已经有一个分支在那里了```

好吧```已经删除了``再放狗看看怎么找回吧```发现了reflog指令:

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

总结:

在做一些危险动作以前,比如reset,还是能多打下一分支的好,保险。反正随时可以删。

git没有想的这么危险,就算--HARD这么硬的操作也可以找回的。


© 著作权归作者所有

共有 人打赏支持
pior
粉丝 26
博文 151
码字总数 22496
作品 0
济南
高级程序员
Git Bash 命令

git 基础 git 分为三个区:工作区、暂存区、仓库 进入文件夹,并用git 命令初始化目录使它成为git管理仓库。 cd :进入文件目录。 ls:显示目录下所有文件。 mkdir:创建文件目录。 git init...

fengzhi714
2016/12/02
20
0
如何恢复gitreset--hard*删除的文件?

git reset --hard 慎用!!! git reset --hard 慎用!!! git reset --hard 慎用!!! 今天,不小心使用了下面的Git命令,结果导致了文件被删除了,花了很大力气才恢复出来。 起因:准备提交代码,...

江木
2017/12/16
0
0
批处理中cmd /c 作用问题

批处理中 cmd /c git init echo hello>welcome.txt 如果不加cmd /c ,则在git init好了之后后面的语句都不会被执行 ===================== 这是我这几天看GIT权威指南时,将书里例子弄成一个...

ddatsh
2011/10/05
1K
2
git revert 和reset的区别

这里讲一下git revert和git reset的区别: git revert 是撤销某次操作,此次操作之前的commit都会被保留 git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区 具体一个例子,假...

mingkaidox
2013/07/16
0
6
Git学习-版本冲突

是这样的,最近在和别人一起做项目的时候,伙伴在上传他的代码时,因为上传速度比较慢,他以为是卡机了,所以关掉git bash,重新上传,重复了几次,最后导致Github上面的代码乱码,而我却把上...

Ryane
2016/05/12
90
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部