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