git server“丢失”commit问题探究
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问题探究的更多相关文章
- git中找回丢失的对象
本文转载自:http://gitbook.liuhui998.com/5_9.html 译者注: 原书这里只有两个链接: Recovering Lost Commits Blog Post,Recov ...
- Windows下安装 msysGit 以及初始化 Git server环境
Windows下git工具msysGit使用以及Git server初始化 Windows下git工具,这里选择msysGit,版本为msysGit-netinstall-1.8.1.2-previe ...
- UBUNTU上的GIT SERVER
Git是一个开源的版本控制系统,由Linus Torvalds主导,用于支持Linux内核开发.每一个Git工作目录,都是一个完整的代码库,包含所有的提交历史.有能力跟踪所有的代码版本,而不会去依赖于 ...
- 在 mac os 上搭建 git server
前言:之前学习了如何使用 git 后,一直想搭建一个本机搭建一个 git server 的,一开始不知道走了弯路用了 gitosis,折腾了我好几天都没配置好.昨晚查资料发现 gitosis 早就过时 ...
- # 基于Gitolite搭建Git Server - 支持SSH&HTTP
Git, 一个分布式的版本管理工具,我认为其革命性的点:在于改变了用户协作的方式,使得协作更简单. 下面讲述 使用一个开源软件 Gitolite搭建一个Git Sever, 并给了一个推荐的团队协助方 ...
- Gitolite轻松部署/管理git server
对于今天越来越受欢迎的Git,相信做开发的朋友都基本有所耳闻.它最大的便利就是分布式的开发库,让使用git作为源码管理库的开发者可以在本地提交代码的修改而不用提交到远程的库,同时需要和团队协作.同步代 ...
- 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 ...
- 逐步在Windows上结合CopSSH + msysGit安装安装Git Server同时集成Git使用Visual Studio
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- Ubuntu 搭建简单的git server
Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议. 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他 ...
随机推荐
- Leetcode 24. Swap Nodes in Pairs(详细图解一看就会)
题目内容 Given a linked list, swap every two adjacent nodes and return its head. You may not modify the ...
- 四维dp,传纸条,方格取数
四维dp例题 四维dp便是维护4个状态的dp方式 拿题来说吧. 1. 洛谷P1004 方格取数 #include<iostream> #include<cstdio> usin ...
- 如何简洁优雅地部署PostgreSQL和Pgweb?
本文转自Rancher Labs 介绍PostgreSQL和Pgweb PostgreSQL是一款以可靠性和性能为人所熟知的开源数据库.它在很多行业和应用程序中都有应用,尤其是web开发人员的最爱.从 ...
- 滴滴AI Labs斩获国际机器翻译大赛中译英方向世界第三
桔妹导读:深耕人工智能领域,致力于探索AI让出行更美好的滴滴AI Labs再次斩获国际大奖,这次获奖的项目是什么呢?一起来看看详细报道吧! 近日,由国际计算语言学协会ACL(The Associati ...
- 写Seo网站标题应该注意什么
http://www.wocaoseo.com/thread-11-1-1.html 最近看了群里一些朋友讨论关于网站优化标题应该注意哪些?各种说法五花八门,好的seo优化标题是可以给网站带来不错的流 ...
- 文件属性及find命令总结
第1章 文件属性 1.1 文件的属性 1.1.1 查看文件的详细属性 PS:ls查看的文件或目录默认的是按照名字的第一个字母进行正序排序 ls 参数选项: -t ...
- 如何把一个一般的git库变成“裸库”?
语法: git clone --bare 「src」 「dest」 e.g. cd ~/Workspace/SourceRepo/ git clone --bare ./ ../Git/bareRep ...
- openshift 4.3中安装helm3并通过helm方式部署应用
openshift 4.3中安装helm3并通过helm方式部署应用 简介 Helm是一个命令行界面(CLI)工具,可简化将应用程序和服务部署到OpenShift Container Platform ...
- Linux服务器被入侵后的处理过程
突然,频繁收到一组服务器 ping 监控不可达邮件,赶紧登陆 zabbix 监控系统查看流量状况. 可见流量已经达到了 800M 左右,这肯定不正常了,马上尝试 SSH 登陆系统,不幸的事,由于网络堵 ...
- Activiti7 查询用户任务列表
package com.itheima.activiti; import org.activiti.engine.ProcessEngine; import org.activiti.engine.P ...