Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397345
  • 博文数量: 78
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-25 09:39
文章分类

全部博文(78)

文章存档

2016年(7)

2015年(1)

2014年(35)

2013年(35)

我的朋友

分类: 项目管理

2013-12-24 19:51:38

在使用Git 的过程中,有时会不小心丢失commit 信息。这一般出现在以下情况下:强制删除了一个分支而后又想重新使用这个分支,hard-reset 了一个分支从而丢弃了分支的部分commit。如果这真的发生了,有什么办法把丢失的commit 找回来呢?通常最快捷的办法是使用git reflog 工具。当你(在一个仓库下) 工作时,Git 会在你每次修改了HEAD 时悄悄地将改动记录下来。当你提交或修改分支时,reflog 就会更新。任何时间运行git reflog命令可以查看当前的状态,运行git log -g 会输出reflog 的正常日志,从而显示更多有用信息。在那个commit 上创建一个新分支就能把它恢复过来。e.g. git branch recover-branch ab1afef

假设引起commit 丢失的原因并没有记录在reflog 中── 可以通过删除recover-branch reflog 来模拟这种情况。因为reflog 数据是保存在.git/logs/ 目录下的,这样就没有reflog 了。现在要怎样恢复commit 呢?办法之一是使用git fsck 工具,该工具会检查仓库的数据完整性。如果指定--ful 选项,该命令显示所有未被其他对象引用(指向) 的所有对象。用上述相同的方法就可以恢复它,即创建一个指向该SHA 的分支。

阅读(2621) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~