记一次尴尬的git reset丢失分支故障
最近...似乎一直在踩坑...
也不是什么故障,只是把一个分支的功能弄没了,之后在reflog里找到又恢复了.
产生原因是有同事错误地把分支B merge到了分支A并push.
我直接在分支A上reset到了merge前的一个节点(但这个节点其实是B分支的).
这导致分支A的头跑到了B分支上,A本来那个分支没有引用就丢了.
先说下解决方法,git reflog找到那个reset,或者直接用git fsck --no-reflogs --unreachable
找到那个commit之后直接再reset回去即可.
主要原因是git merge之后的log会显示另一个分支的commit记录(毕竟没有真正的分支...).
这里简单重现下:
* dacbc52 (HEAD -> master) Merge branch 'a'
|\
| * 7b83cf6 (a) a commit
* | 9f4488b master commit
|/
* 47a0ab3 init
这样的一个分支情况,master merge了a节点产生2126这个commit.
这个时候看一下master的log,信息如下:
commit dacbc528153d48f3a210a9673ebc8148cfdb50d3
Merge: 9f4488b 7b83cf6
Date: Fri Jun 29 21:21:10 2018 +0800
Merge branch 'a'
commit 7b83cf6664cd5b84c5f66ef99f0fb39fb5ab57bd
Date: Fri Jun 29 21:19:59 2018 +0800
a commit
commit 9f4488ba008889b583205fc9405f4760150a2337
Date: Fri Jun 29 21:18:26 2018 +0800
master commit
commit 47a0ab3a70e7b4a663f99bc23542a51a90af152c
Date: Fri Jun 29 21:18:03 2018 +0800
init
可以看到a节点上的commit也被包含在了里面....(PS:之前我们使用的是hg,分支的概念有所不同,merge之后查看当前分支只是会显示本分支和merge节点,并且也没有git里的fast-forward概念)
误操作就是因为要撤销master的merge,执行了git reset --hard 7b83c
(因为刚好是merge下面的第一个节点)
执行后的结果:
* 7b83cf6 (HEAD -> master, a) a commit
* 47a0ab3 init
可以看到default的结果已经不复存在了
找回的话
> git reflog
7b83cf6 HEAD@{0}: reset: moving to 7b83c
dacbc52 HEAD@{1}: merge a: Merge made by the 'recursive' strategy.
可以直接reset回dacbc52
再进行正常操作
主要原因还是对于git的理解不深再加上之前使用hg的惯性产生了误判.
参考资料:
https://git-scm.com/book/zh/v1/Git-内部原理-维护及数据恢复
https://git-scm.com/book/zh/v1/Git-分支-分支的新建与合并
记一次尴尬的git reset丢失分支故障的更多相关文章
- git合并丢失代码问题分析与解决(错误操作导致)
问题描述 我们在主干dev和branch1分支上进行并行开发.当要把branch1功能的代码合并到dev上时,发现dev上开发的部分功能代码找不到了. 那么,是在branch1上,作了删除提交导致的吗 ...
- 代码回滚:git reset、git checkout和git revert区别和联系
git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为 ...
- [转]恢复 git reset -hard 的误操作
转帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964 有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 r ...
- 每天一命令 git reset
在使用git的时候不免遇到commit的时候commit了错误的代码的时候,这时候就需要用到git的常用命令之一 reset了. reset顾名思义为重置.重置的是HEAD指针,可以使HEAD指针移 ...
- git 找回丢失的commit
From : http://dmouse.iteye.com/blog/1797267 git 的错误操作,导致丢失了重要的commit,真是痛不欲生: 最后通过git神器终于找回了丢失的commit ...
- [译]git reset
git reset 如果说git revert是一个安全的撤销方式, 那么git reset就是一个非常危险的方法了. 当你使用git reset撤销的时候, 你没有可能在回到最初了-他是一个永久的不 ...
- git中找回丢失的对象
本文转载自:http://gitbook.liuhui998.com/5_9.html 译者注: 原书这里只有两个链接: Recovering Lost Commits Blog Post,Recov ...
- 恢复 git reset -hard 的误操作
有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(re ...
- 记一次小团队Git实践(下)
在上篇中,我们已经能基本使用git了,接下来继续更深入的挖掘一下git. 更多的配置自定义信息 除了前面讲的用户名和邮箱的配置,还可以自定义其他配置: # 自定义你喜欢的编辑器,可选 git conf ...
随机推荐
- net读取文件字节流要注意的小细节
]; var numBytesToRead = (int)fileLenght; ; using (fs) { do { ); numBytesRead += n; numBytesToRead -= ...
- python 将png图片格式转换生成gif动画
先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...
- 创建、使用SpringBoot项目
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- URL包里的URL.getpath()对路径中空格识别为%20的处理办法
方法(1),使用repaceAll("%20",' ')替换后,只能解决空格问题.但是路径中包含%和中文就不行了. 方法(2),使用URLDecoder.decode(str,&q ...
- disconf使用小结
disconf使用小结 目前我们公司用的分布式配置中心是disconf,对于普通的spring项目集成还是比较方便,主要功能点分布式配置还有配置的动态更新通知 安装disconf服务端 参考地址htt ...
- Excel—图表函数
OFFSET(引用函数)它可以找一个区域,把一个区域的值都拿回来 函数语法:OFFSET(从哪个单元格开始,这个单元格下移多少行开始,然后现在的位置再往右多少列开始,要取的值是现在的位置开始下移多少行 ...
- react使用过程中常见问题
目录 一.减小输入字符数 二.用props.children来引用位于前置标签和后置标签之间的内容 三.创建组件两条主要的途径 四.JSX属性采用驼峰式的大小写规则(即‘onClick’而非‘oncl ...
- 【转】Mac 删除文件夹里所有的.svn文件
转自: mac 删除文件夹里所有的.svn文件 想要把SVN專案作轉移或複製時 舊的「.svn」真的是很煩人的東西 最快的方式是用終端機輸入 sudo find /Users/justfly/Do ...
- git创建本地分支以及推送本地分之至远程分支
Git分支策略 实际开发中,应当按照以下几个基本原则进行管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上边干活. 那在哪干活呢?干活都在dev分支上,也就是说,de ...
- 使用vue-awesome-swiper的相关问题
最近自己在仿做一个旅游网站的vue项目,在首页中使用了vue-awesome-swiper插件来实现轮播图的效果,发现了以下几种问题: 一.需要额外引入swiper.css 原来使用vue-aweso ...