其他分享
首页 > 其他分享> > 记一次git代码丢失找回

记一次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