记一次尴尬的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 ...
随机推荐
- How Classes are Found
转载自: https://docs.oracle.com/javase/7/docs/technotes/tools/findingclasses.html How Classes are Found ...
- linux su失败:无法设置用户ID:资源暂时不可用
环境 linux RHEP 7.+ su - user 提示 :无法设置用户ID,资源暂时不可用 检查 cat /etc/security/limits.d/90-nproc.conf * soft ...
- unity 时间转换方式
第一种 计时器的写法 带有调用系统时间 using System; using System.Collections; using System.Collections.Generic; using ...
- C语言--第五次作业--指针
1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 没想到都已经学习完C语言的灵魂-指针的内容了(当然也是C里面最难学习的内容了).虽然在之前就有听学习进度比较 ...
- 2018-2019-2 20165235 《网络对抗技术》 Exp6 信息搜集与漏洞扫描
2018-2019-2 20165235 <网络对抗技术> Exp6 信息搜集与漏洞扫描 1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应 ...
- 2018-2019 20165235 网络对抗 Exp4 恶意代码分析
2018-2019 20165235 网络对抗 Exp4 恶意代码分析 实验内容 系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件 ...
- 一、OpenStack环境准备及共享组件安装
一.OpenStack部署环境准备: 1.关闭防火墙所有虚拟机都要操作 # setenforce 0 # systemctl stop firewalld 2.域名解析所有虚拟机都要操作 # cat ...
- Exp5 MSF基础应用 20164302 王一帆
1.实验内容 1.1实验要求 一个主动攻击实践,ms08_067; 一个针对浏览器的攻击,MS10-018(成功且唯一),MS12-004(成功且唯一): 一个针对客户端的攻击,adobe_toolb ...
- 超时导致的Galera节点加入集群失败
需求:为galera集群添加新的节点. 初始化新的节点,加入的时候一直报错,加入失败,报错日志如下 WSREP_SST: [ERROR] Removing /var/lib/mysql//.sst/x ...
- 20181117-python第二章学习小结-part2
浮点型补充: 有限小数与无限循环小数,不包括无理数! 小数点后面的数据运算太复杂,精确度不及整数! 尽量使用科学计数表示小数 列表学习(语法) 创建:[] list = [] #创建空表 list ...