Kotlin项目执行git lfs migrate import后全文件变为LFS指针,如何回滚修复?
核心问题成因
出现全项目文件被替换为LFS指针的直接原因,是执行git lfs migrate import操作时未显式指定文件匹配范围,且本地.gitattributes配置中存在规则过于宽泛的LFS跟踪条目(例如错误匹配了所有后缀为.kt、.xml的源码文件),导致历史提交中所有命中规则的文件被批量转换为LFS指针存储,未实现仅针对大体积二进制文件做LFS托管的预期目标。
分步修复操作指南
前置准备
- 将本地留存的全量项目备份单独存放,避免操作过程中出现文件覆盖丢失
- 暂时关闭Android Studio,防止IDE自动修改VCS关联配置干扰操作
- 打开项目根目录下的
.gitattributes文件,删除所有宽泛的LFS跟踪规则,仅保留明确需要纳入LFS管理的大文件匹配规则
回滚本地仓库到误操作前状态
根据你提供的终端日志,误操作前的master分支原始提交哈希为f42b3a9d9874f2da0922,在项目根目录依次执行以下命令:
# 重置本地分支到误操作前的正常提交状态 git reset --hard f42b3a9d9874f2da0922 # 清理本地缓存的无效LFS对象 git lfs prune
注意:该操作会清除当前工作区所有被替换为LFS指针的异常文件,工作区内容将完全恢复为误操作前的正常代码状态
清理远端仓库的异常内容
- 执行强制推送命令,用本地已恢复正常的分支覆盖远端此前被LFS指针替换的错误版本:
git push --force origin master
- 打开GitHub仓库的LFS管理面板,清空此前被错误上传的1.4G无效LFS对象,避免占用仓库存储配额
- 检查远端仓库的
.gitattributes文件,确认不存在匹配源码、配置类文件的宽泛LFS跟踪规则
重新配置正确的LFS跟踪规则
严禁直接执行不带参数的git lfs migrate import命令,需严格按实际需求指定纳入LFS的文件范围:
# 按实际项目需求配置LFS跟踪规则,例如仅跟踪大体积安装包、依赖包、大型素材 git lfs track "*.apk" git lfs track "*.aar" git lfs track "app/src/main/assets/fonts/**/*.ttf" # 提交修正后的.gitattributes配置 git add .gitattributes git commit -m "chore: 修正Git LFS跟踪规则范围"
如果需要迁移历史提交中已存在的大文件到LFS存储,必须在migrate命令中显式指定包含和排除的文件范围:
# 正确的迁移命令示例:仅迁移指定类型的大文件,明确排除所有源码、配置类文件 git lfs migrate import --include="*.apk,*.aar,app/src/main/assets/fonts/**/*.ttf" --exclude="*.kt,*.xml,*.gradle,*.kts,.idea/**" --yes
恢复Android Studio的VCS关联
- 重新打开Android Studio,进入设置中的版本控制配置页,将项目根目录重新关联为Git仓库
- 检查IDE内的文件状态标识,确认所有源码、配置文件均可正常打开编辑,不存在LFS指针格式的内容
修复效果验证
操作完成后依次完成以下检查,确认问题彻底解决:
- 执行
git lfs migrate info命令,确认输出列表中不再出现.kt、.xml、.gradle等源码/配置类文件,仅保留需要纳入LFS管理的大文件类型 - 打开GitHub网页端,随机预览任意
.kt、.xml源码文件,确认可正常显示代码内容,不会强制触发文件下载 - 遍历项目工作区文件,确认不存在以
version https://git-lfs.github.com/spec/v1开头的异常指针文本 - 测试Android Studio的VCS提交、拉取、分支切换功能,确认所有操作可正常执行
内容的提问来源于stack exchange,提问作者Lalit Fauzdar
相关产品推荐
相关产品推荐

