如何恢复PythonAnywhere上误删的Git提交?
解决PythonAnywhere上Git误操作+磁盘满导致的Django项目恢复问题
一、先解决磁盘满的问题(git命令失败的直接原因)
磁盘满是导致fatal: unable to write new index file错误的核心原因,必须先释放空间:
- 查看磁盘占用详情:
执行df -h确认磁盘挂载点,再在项目目录和根目录执行du -sh *,定位占用空间大的文件/目录 - 优先清理冗余内容:
- 清理Git冗余对象:在项目目录执行
git gc --prune=now,这会删除Git中无用的旧提交对象、缓存,快速释放空间 - 删除临时文件:执行
rm -rf /tmp/*(PythonAnywhere的临时文件目录,不会影响项目运行) - 清理日志文件:找到项目内的Django日志(如
logs/目录)或PythonAnywhere的web日志,删除旧的大体积日志文件(保留最近的日志即可) - 删除无用大文件:比如下载的安装包(.tar.gz/.whl)、过期备份文件等,确认无用后删除
- 清理Git冗余对象:在项目目录执行
完成后执行 df -h 确认磁盘至少有几百MB可用空间。
二、恢复误删的Git提交
磁盘空间正常后,按以下步骤恢复项目版本:
- 查看本地Git操作记录:执行
git reflog,找到执行git reset --hard HEAD~1之前的目标提交SHA值(对应条目类似abc1234 HEAD@{2}: commit: 修复XX功能,前面的字符串就是SHA值) - 恢复到正确版本:执行
git reset --hard <找到的SHA值>,本地项目会立即恢复到误操作前的状态 - 同步到远程仓库:执行
git push --force,覆盖远程仓库的错误版本,将正确的提交推送回去
补充说明
- 磁盘突然占满的原因:Git执行reset后,旧的提交对象不会立即被删除,会暂时存储在Git对象库中,加上操作生成的临时文件,导致空间占用激增。你删除的单个文件可能不足以抵消这些新增占用,所以仍显示100%满
- 后续建议:尽量避免直接使用
git push --force,如需回退远程提交,先确认本地reflog有完整操作记录,或提前备份远程仓库
内容的提问来源于stack exchange,提问作者Percival
相关产品推荐
相关产品推荐

