分类: 项目管理
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 的分支。