git commit遇到大文件提交被拒绝的正确处理姿势

64 阅读2分钟

问题

combo-docker项目定位快速为服务端搭建可用的中间件环境,包含了mysql、redis、kafka、zookeeper等中间件,项目都是以docker-compose方式进行打包。在制作kakfa监控中间件kafka-stream等部署过程中,由于个人需要需要重新制作镜像,镜像脚本其中有一步是将开km-rest.jar 放到镜像里。但是由于这个文件大于100M,在git提交的时候无法提交到server。

image-20251204221755315

但是此时的commit里还有10个其他已修改文件,无法将整体的commit 丢弃掉。要如何从本地commit里删除大文件,并且保障修改的10个不变,然后进行提交呢。

解决方案

经过仔细研究发现个方法可以提供给大家参考

步骤 1:从 commit 中移除大文件(保留工作区文件)

git rm --cached 仅删除「暂存区 / 版本库」中的大文件,工作区的大文件会保留(如果想直接删除工作区的大文件,去掉 --cached 参数):

# 替换为你的大文件路径(比如:git rm --cached docs/large_file.zip)
git rm --cached 你的大文件路径

步骤 2:修正最近的 commit(保留原提交信息)

执行以下命令修正上一次 commit,将「移除大文件」的操作合并到原 commit 中(不会产生新的 commit 记录):

git commit --amend
  • 执行后会打开编辑器(默认是 vim),里面是原 commit 的信息,直接保存退出即可(不需要修改内容)。
  • 作用:更新最近一次 commit,此时该 commit 中已没有大文件,仅保留 10 个文件的修改。

步骤 3:正常推送

此时本地 commit 已清理掉大文件,直接推送即可:

git push

后续保障:

避免大文件再次提交,将大文件添加到 .gitignore(永久忽略)