1 背景

gitlab某仓库有同事发现部分代码文件内容丢失,具体表现

A. dev分支commit信息是连续的,看不出明显的大时间范围批量丢失

B. 以SuncardCashier/control/CSymbolEdit.h为例,在1c88f613下只能看到2个历史相关提交

但是1天前提交的bfff1f51,也有此文件的修改提交,意味着bfff1f51这个提交“丢失”了

2 追查过程

2.1 gitlab server侧寻找线索

表面上像是gitlab server出现了某些问题导致“丢失”,所以查看/var/log/gitlab/gitlab-rails/下的production.log日志(production.log是当天的,production.log.31.gz是更早日期压缩后的,需要解压查看)。

但是通过查看日志只有一些查看上述commit的api access log,并无有效线索。并且同时段的其他仓库可以看到commit信息

2.2 gitlab network graph寻找线索

此时怀疑是有人在本地误使用rebase等命令再force push导致server的commit丢失,通过gitlab的network graph是一个高效的梳理手段

首先在network grapsh搜索bfff1f51(灰色箭头指向),这也说明gitlab server其实有此commit数据

这里不同颜色线相当于是dev分支不同的提交人,最右侧红线为主分支,其中线之间的箭头是merge。查看图中bfff1f51之后各线最邻近的merge,基本都还可以看到bfff1f51这个提交,说明正常。除了红色箭头标识的左侧绿线!

此提交为d5049b0,可以看到该文件已经没有bfff1f51提交了

继续到绿线分支更后的操作追查,之后它merge到了粉线(左起第二),粉线再merge到了兰线(左起第三),粉线再merge到了红线(左起第四)。而“丢失”情况如下图示,即被绿线merge前都正常,merge后都丢失了

3 结论

至此,可以基本确定是d5049b0进行了类似rebase回滚到之前提交的行为(其commit message也填写的是“冲突”),另外可以看到该仓库设置的protected branch只有master,无dev,所以是具备force push条件的

4 建议的改进措施:

A. 将dev等需重点分支禁止force push

B. 开发人员对于git回滚等操作需谨慎对待

“架构人生,迭代生命” ——深邃老夏,搜索summer_deep微信公众号可获取更多帮助

git server“丢失”commit问题探究的更多相关文章

  1. git中找回丢失的对象

    本文转载自:http://gitbook.liuhui998.com/5_9.html 译者注: 原书这里只有两个链接: Recovering Lost Commits Blog Post,Recov ...

  2. Windows下安装 msysGit 以及初始化 Git server环境

    Windows下git工具msysGit使用以及Git server初始化 Windows下git工具,这里选择msysGit,版本为msysGit-netinstall-1.8.1.2-previe ...

  3. UBUNTU上的GIT SERVER

    Git是一个开源的版本控制系统,由Linus Torvalds主导,用于支持Linux内核开发.每一个Git工作目录,都是一个完整的代码库,包含所有的提交历史.有能力跟踪所有的代码版本,而不会去依赖于 ...

  4. 在 mac os 上搭建 git server

    前言:之前学习了如何使用 git 后,一直想搭建一个本机搭建一个 git server 的,一开始不知道走了弯路用了 gitosis,折腾了我好几天都没配置好.昨晚查资料发现 gitosis 早就过时 ...

  5. # 基于Gitolite搭建Git Server - 支持SSH&HTTP

    Git, 一个分布式的版本管理工具,我认为其革命性的点:在于改变了用户协作的方式,使得协作更简单. 下面讲述 使用一个开源软件 Gitolite搭建一个Git Sever, 并给了一个推荐的团队协助方 ...

  6. Gitolite轻松部署/管理git server

    对于今天越来越受欢迎的Git,相信做开发的朋友都基本有所耳闻.它最大的便利就是分布式的开发库,让使用git作为源码管理库的开发者可以在本地提交代码的修改而不用提交到远程的库,同时需要和团队协作.同步代 ...

  7. Setup Git Server in CentOS 6.3

    0. Environment: Server machine: CentOS 6.3 x86 Client machine: Windows 10 Pro x86_64 1. Install ssh ...

  8. 逐步在Windows上结合CopSSH + msysGit安装安装Git Server同时集成Git使用Visual Studio

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  9. Ubuntu 搭建简单的git server

    Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议. 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他 ...

随机推荐

  1. latex:公式的序号

    1.排序单位 在文类book或report中,行间公式是以章为排序单位的,即每一新章节开始,公式序号计数器equation就被清零.比如第1章第3个公式的序号是(1.3),第2章第1个公式的序号是(2 ...

  2. 医疗seo常用的图标工具

    http://www.wocaoseo.com/thread-304-1-1.html 下面是一些医疗seo常用的一些图表工具,这些都是些最简单的工具,主要放置这里以防止以后有作用. 1,医疗的常用搜 ...

  3. 04.简单了解一下Redis企业级数据备份方案

    一.企业级的持久化的配置策略 (1)每隔1分钟去检查如果超过10000个可以变更,则生成一个快照.RDB最多丢1分钟的数据. save 60 10000 (2)AOF一定要打开,fsync,every ...

  4. 拿捏了!ConcurrentHashMap!

    概述 本文将对JDK8中 ConcurrentHashMap 源码进行一定程度的解读.解读主要分为六个部分:主要属性与相关内部类介绍.构造函数.put过程.扩容过程.size过程.get过程.与JDK ...

  5. 微信小程序入门教程

    首先请看demo 很简单的静态js就可以实现一款小程序开发. js.json.html.css四个核心文件 序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小 ...

  6. RabbitMQ入门指南

    消息队列(Message Queue,以下简称MQ)常用于异步系统的数据传递.若不用MQ,我们只能[在应用层]使用轮询或接口回调等方式处理,这在效率或耦合度上是难以让人满意的.当然我们也可以在系统间保 ...

  7. 免费领CRMEB移动社交电商系统源码与授权

    移动电商风起云涌,直播带货重塑销售模式,传统商业更是举步维艰,各行各业转型移动电商迫在眉睫,拥有一款好的移动社群社交电商系统成为众多企业与商家的心病! 你曾是否被那些劣质的移动电商系统搞得心力憔悴? ...

  8. myblogplus 第三期 如何更改你博客的图标,已实现 - mooling原创

    三言两语 博客的logo可以凸显你的blog的个性 不知道你有没有觉得博客园原始的那个小矿工不好看了呢 fromto 这才是个人博客的style! 为什么要写这篇文章 因为在博客园的“找找看”中,如果 ...

  9. 深圳做假证h

    深圳做假证[电/薇:187ヘ1184ヘ0909同号]办各类证件-办毕业证-办离婚证,办学位证书,办硕士毕业证,办理文凭学历,办资格证,办房产证不. 这是一个简单的取最大值程序,可以用于处理 i32 数 ...

  10. googleEarth

    中国航天科技集团有限公司 http://www.spacechina.com/n25/n144/n210/index.html Celestia [官网]: https://celestia.spac ...