回滚Commit丢失多日进度+GitHub Desktop提交失败文件丢失求助
别慌,Git的revert操作并没有真正删除你原来的开发提交——它只是生成了一个新提交来抵消原提交的改动,你的进度完全可以找回来,试试这两种方法:
方法1:重新应用原提交
先找到被revert的那个提交的哈希值:在命令行进入仓库目录,执行git log --oneline,你会看到类似abc123 完成支付模块开发(你的开发提交)和def456 Revert "完成支付模块开发"(对应的revert提交)的记录,复制原提交的哈希值(比如abc123)。
接着执行git cherry-pick abc123,Git会把原提交的内容重新应用到当前分支,生成一个新提交,你的开发进度就回来了。方法2:直接撤销Revert操作
同样用git log --oneline找到revert提交的哈希值(比如def456),执行git revert def456,这个命令会创建一个新提交来抵消之前的revert操作,相当于直接恢复到revert之前的状态。
完成后如果需要同步到远程,执行git push即可。
这个问题分两步处理:先定位大文件,再彻底清理并配置.gitignore:
定位大文件
GitHub Desktop看不到文件没关系,用命令行精准查找:- 进入本地仓库目录,执行
find . -size +100M,这个命令会搜索当前目录下所有大于100MB的文件,直接输出文件的完整路径。 - 如果是未被Git追踪的文件,也可以用
git status或git ls-files --exclude-standard --others查看所有未追踪文件,从中筛选大文件。
- 进入本地仓库目录,执行
配置.gitignore并清理Git历史
- 如果文件还没被提交过:
打开项目根目录的.gitignore文件(没有就新建一个),把找到的大文件路径加进去,比如data/huge-training-set.zip,保存后执行git add .gitignore,git commit -m "忽略大训练数据集文件",之后再尝试推送就不会包含这个文件了。 - 如果文件已经被提交到Git历史里:
这时候即使删除文件或加.gitignore,推送还是会失败——因为Git历史里还存着这个大文件。需要用git filter-repo清理历史:- 先确保安装了
git-filter-repo(可以通过系统包管理器安装,或者从官方源码编译安装) - 执行
git filter-repo --path data/huge-training-set.zip --invert-paths,这个命令会彻底从Git历史中移除指定的大文件 - 最后强制推送到远程:
git push origin main --force(注意:强制推送会覆盖远程分支,如果你和团队协作,一定要提前告知其他人同步你的操作,避免代码冲突)
- 先确保安装了
- 如果文件还没被提交过:
关于GitHub Desktop看不到文件的说明
大概率是因为文件被加入了.gitignore,或者是未追踪但Desktop没刷新,重启GitHub Desktop就能看到;如果是已经被清理出Git历史的文件,Git不再追踪它,Desktop自然也不会显示。
内容的提问来源于stack exchange,提问作者user3614030

