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进行的操作,千万别手动自己乱来。不然真的会导致一些不可逆的结果。