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

提交大文件并执行Git回退后,如何成功推送无大文件的代码?

解决Git推送大文件历史的问题

问题核心:你的Commit b已经将大文件提交到Git历史中,后续的回滚、删除操作只是在最新提交中移除了文件,但历史记录里的大文件依然存在,推送时Git会检查整个提交历史,因此仍触发大小限制。git rm --cached无效是因为当前工作区/暂存区已经没有这个文件了,但历史里还留存着。

以下是具体解决步骤:

  • 第一步:定位初始无大文件的提交
    执行git log --oneline查看提交记录,找到Commit a的哈希值(类似abc123的字符串)。

  • 第二步:交互式重写提交历史
    执行命令:

    git rebase -i <Commit-a的哈希值>
    

    比如Commit a的哈希是abc123,就输入git rebase -i abc123。

    在弹出的编辑界面中,找到对应Commit b的那一行,把开头的pick改成edit,其他提交保持pick不变,保存并退出编辑器。

  • 第三步:移除Commit b中的大文件
    此时Git会回到Commit b的状态,执行命令删除大文件:

    git rm bigfile.json
    

    然后修改这个提交,保留原提交信息:

    git commit --amend --no-edit
    
  • 第四步:完成重写并推送
    继续完成剩余的rebase流程:

    git rebase --continue
    

    如果过程中出现冲突,解决冲突后执行git add .,再运行git rebase --continue直到完成。

    最后强制推送修改后的历史(注意:如果是多人协作仓库,需确认其他协作者没有基于旧历史开发):

    git push --force
    

备选方案(如果交互式rebase太复杂)

使用git filter-repo工具彻底清理历史中的大文件(需先安装该工具):

git filter-repo --path bigfile.json --invert-paths

执行完成后同样需要强制推送:git push --force

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:10:31