如何使用Git LFS并重写Git仓库历史记录
解决方案
1. 撤销已做的临时变更
你之前提交的git lfs track *.bin变更可以先撤销,回到干净状态:
- 若还在该临时分支且未合并到master,执行:
git reset --hard HEAD~1 git lfs uninstall
2. 使用Git LFS Migrate重写历史
Git LFS的migrate命令是官方推荐的历史迁移工具,能自动把指定文件转为LFS追踪,并在历史中添加对应的.gitattributes配置。
迁移master分支
执行以下命令,会遍历master分支所有历史提交,将所有.bin文件替换为LFS指针,同时在第一个出现.bin文件的提交前,自动添加包含LFS追踪规则的.gitattributes文件:
git lfs migrate import --include="*.bin" --branch=master
迁移其他分支(可选)
如果需要迁移其他分支,直接指定分支名即可(多分支用逗号分隔):
git lfs migrate import --include="*.bin" --branch=dev,feature-test
3. 验证迁移效果
- 查看最早包含
.bin文件的提交,确认已自动添加.gitattributes - 执行
git lfs ls-files,检查所有历史中的.bin文件都已被LFS追踪 - 用
git log --oneline确认提交结构和原历史一致,仅.bin文件存储方式变更
4. 强制推送到远程仓库
由于重写了历史,推送时需要强制覆盖远程分支:
git push --force origin master
其他分支同理:
git push --force origin dev feature-test
注意事项
- 通知团队成员历史已被重写,他们需要重新克隆仓库,或执行
git fetch && git reset --hard origin/<分支名>同步 - 迁移出错时,可通过
git reflog找到迁移前的提交哈希,执行git reset --hard <提交哈希>回退
内容的提问来源于stack exchange,提问作者David Yaw
相关产品推荐
相关产品推荐

