git存储库损坏该怎么办

今天一不小心把我的Github Pages上的git存储库给弄坏了。起因是这样子的,我没有通过git操作,手动把某个文件给彻底删除了,导致我在上传更新的时候报错

fatal: unable to read XXXXXX

上面的XXXXXX的内容就是commit后的日志版本,可以通过命令来查看全部日志

1
git log --all

因为其中的某一个提交版本里,引用到了我彻底删除掉的文件,导致提交失败。

我的目的是把这段引起错误的commit删除,首先我得要找到该commit日志版本,可以使用命令,一个个尝试去看

1
git show [version]

其中version就是日志的版本了。等定位到了具体的版本号后,我想到了两个方法

git reset

git reset分为软删除和硬删除两种,之前的文章里有介绍过。

我分别尝试了两种方法,硬删除直接报错失败,原因同上。而软删除虽然把日志版本号定位到了我指定的版本下,但是上传时,还是报错。要想恢复软删除的话,可以使用命令,查看ref日志版本

1
git reflog

找到最新日志版本号,然后再用一次软删除到最新版本即可。

git rebase

git rebase命令可以删除提交记录中间的提交。语法如下

1
git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>

总之,我采用这种方式也没成功。

git init

实在没办法了,使用命令git fsck命令扫描后报错一堆。

只能硬着头皮执行以下命令了

1
rm -R .git
git init
git add .
git commit -m "Re-initialize repository without old history."

这是最后没有办法的办法。重新创建一个git存储库,损坏的存储库只能弃用了。好处是可以重新上传了,缺点是以前提交的历史记录都没有了。

总结

好吧,这次这个事我虽然没有完美解决,但是至少告诉我一个事,能用git进行的操作,千万别手动自己乱来。不然真的会导致一些不可逆的结果。

avatar

chilihotpot

You Are The JavaScript In My HTML