记一次git代码丢失找回
作者:互联网
前几天需要把自己的代码提交到测试,于是就跟同事沟通代码提交的相关事宜。边沟通边操作,经过一系列提交,拉取代码,合并分支之后突然发现自己的代码一部分提交上了仓库,一部分丢失了(主要是新增的代码,修改的代码全部丢失)。于是瞬间慌了,这玩意重新写可是个大的工程,而且关键心态不一样了。于是网上一通搜索,成功找回代码;
一,回滚版本
1)git log 查看提交日志
2)通过 git reset --hard 85d2618bbb73d1ec091d5ac7dbb05cf3a4eff04b(提交记录的版本号)找回
二,通过 .git 文件夹找回
1)找到本地仓库的.git 文件夹
2)找到 .git\objects 目录下面的各种文件夹例如:
本次我们就通过这个还原丢失的代码:
找到文件夹点击进去,就能看到例如:
在这个文件夹里面 电脑右键 git bash here会出现 :
在这里输入命令:
git cat-file -p 文件夹名文件名,例如:
git cat-file -p 00482a599cc6e7493b894fac3a69c60dff3238a3 (注意:00是482a599cc6e7493b894fac3a69c60dff3238a3文件的文件夹名)
这样就能找到丢失的代码。但是这种方式只能单个找回,要想批量找回还是要代码处理下:
#读取.git文件夹objects目录的内容
$datas = $this->readFile("/vagrant/Code/git/objects");
foreach ($datas as $key => $data) {
if ( strpos( $data ,'/pack/' ) !== false ) {
echo "jump : " .$data .PHP_EOL;
continue;
}
$files = array_filter(explode('/', $data)) ;
$file = $files[5] . $files[6];
$str = "git cat-file -p {$file} > E:/vagrant/Code/find/{$key}.txt";
echo $str . PHP_EOL;
}
通过 git cat-file -p {$file} > E:/vagrant/Code/find/{$key}.txt 导出到特定的文件里面。于是就顺利的还原丢失的所有代码。剩下的工作就是对比下复制就好啦。
标签:git,找回,代码,文件夹,丢失,file 来源: https://www.cnblogs.com/wang1229/p/16412331.html