You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已移除并忽略大文件仍Git推送失败,如何同步GitHub仓库?

解决Git推送因历史大文件被拒绝的问题

你遇到的问题根源是当前工作区虽然已经移除了大文件并加入.gitignore,但Git的提交历史中仍然存在这个大文件的记录,远程GitHub检测到历史中的大文件,因此拒绝推送。以下是两种可行的解决方法:

方案一:用交互式Rebase修改近期提交历史

适用于大文件是在本地领先远程的42个提交中添加的情况:

  1. 定位包含大文件的提交记录:
git log --oneline -- data/SU_COMP_LT.csv

该命令会列出所有涉及该大文件的提交哈希和说明。

  1. 启动交互式Rebase,修改远程master之后的所有本地提交:
git rebase -i origin/master
  1. 在弹出的编辑器中,找到包含该大文件的提交,将行首的pick改为edit,保存并退出。

  2. 当Rebase暂停到目标提交时,移除提交中的大文件:

git rm --cached data/SU_COMP_LT.csv

如果文件仍在本地目录,去掉--cached直接执行git rm data/SU_COMP_LT.csv

  1. 修正该提交:
git commit --amend --no-edit
  1. 继续完成Rebase流程:
git rebase --continue

若出现冲突,解决冲突后执行git add .再继续Rebase。

  1. 强制推送修改后的历史到远程:
git push --force origin master

方案二:用BFG Repo-Cleaner批量清理历史大文件

如果大文件存在于更早的历史提交中,用BFG工具更高效:

  1. 先备份本地仓库,避免操作失误导致数据丢失。

  2. 下载BFG工具(对应系统的jar包),在仓库根目录执行:

java -jar bfg.jar --delete-files data/SU_COMP_LT.csv

该命令会自动移除所有历史提交中的目标大文件。

  1. 清理Git的冗余引用和垃圾文件:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
  1. 强制推送清理后的历史到远程:
git push --force origin master

注意事项

  • 强制推送会覆盖远程master分支的历史,若有其他协作者在该分支工作,必须提前沟通,让他们重新拉取代码。
  • 确保.gitignore文件中已正确添加data/SU_COMP_LT.csv,避免后续再次误提交该文件。

内容的提问来源于stack exchange,提问作者cona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:39:41