如何在Git仓库仅保留二进制文件最新版本且保留本地未提交修改?
解决方法
1. 暂存本地未提交修改
先把当前未提交的修改临时存起来,避免后续操作丢失:
git stash push -m "临时保存本地未提交修改"
执行后,本地工作区会回到与当前HEAD一致的干净状态。
2. 重写历史,仅保留二进制文件的最新版本
使用git filter-repo工具(Git 2.22+推荐使用,比旧的git filter-branch更可靠)移除指定二进制文件的历史版本。
针对单个/多个指定文件
假设要处理的二进制文件是fileA.bin、fileB.zip,执行:
git filter-repo --path fileA.bin --path fileB.zip --invert-paths --force
接着恢复当前最新版本的这些文件:
git restore HEAD -- fileA.bin fileB.zip git add fileA.bin fileB.zip git commit -m "恢复二进制文件的最新版本"
针对某一类后缀的文件
如果要处理所有.bin后缀的二进制文件,执行:
git filter-repo --path-glob '*.bin' --invert-paths --force git restore HEAD -- '*.bin' git add '*.bin' git commit -m "恢复所有.bin文件的最新版本"
3. 恢复本地未提交的修改
把之前暂存的修改恢复回来:
git stash pop
如果出现冲突,手动解决后提交即可。
4. 强制推送到远程仓库
由于重写了历史,需要强制推送覆盖远程仓库(仅在你是唯一开发者的情况下执行):
git push --force origin <你的分支名>
例如分支为main时,执行git push --force origin main。
注意事项
- 操作前建议备份原始仓库,避免失误无法恢复
git filter-repo会修改本地仓库历史,执行前确保没有其他未处理的分支- 强制推送后,远程仓库历史会被覆盖,后续本地操作需基于新历史进行
内容的提问来源于stack exchange,提问作者Daahrien
相关产品推荐
相关产品推荐

