git删除某条记录的大文件提交
由于git误提交了个大文件(>1G),虽然删除了,但是提交记录还在,导致出发了git大文件警告。
需求:找到提交大文件的记录,删除提交的大文件。
针对所有分支删除该次提交的大文件:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch "DONS/MemoryCaptures/Snapshot-638413670716915937.snap"' --prune-empty -- --all
针对memory_swap_longlog分支删除该次提交的大文件
git filter-branch --index-filter 'git rm --cached --ignore-unmatch "DONS/MemoryCaptures/Snapshot-638413670716915937.snap"' --prune-empty -- memory_swap_longlog
效果:
之前这里有个大文件提交记录
chatGPT解释:
git filter-branch 是 Git 提供的一个强大工具,用于对 Git 仓库的历史进行重写。在这个命令中,你使用 --index-filter 选项指定了一个 shell 命令,该命令将应用于每个提交的索引(暂存区)。具体来说,这个命令将使用 git rm --cached --ignore-unmatch "DONS/MemoryCaptures/Snapshot-638413670716915937.snap" 作为索引筛选器。
让我解释一下这个命令的各个部分:
git filter-branch: 这是执行历史重写的 Git 命令。
--index-filter: 这个选项指定一个 shell 命令,该命令将被应用于每个提交的索引(暂存区)。
'git rm --cached --ignore-unmatch "DONS/MemoryCaptures/Snapshot-638413670716915937.snap"': 这是作为索引筛选器的命令。它使用 git rm 命令从索引中删除指定的文件,而 --cached 选项表示只从索引中删除,而不会删除工作目录中的实际文件。--ignore-unmatch 选项表示如果文件不存在,则继续执行,不报错。"DONS/MemoryCaptures/Snapshot-638413670716915937.snap" 是你要删除的大文件的路径。
--prune-empty: 这个选项表示在删除文件后,如果提交变为空(即没有任何变化),则删除这个提交。
--all: 这个参数表示对所有分支进行操作。
综合起来,这个命令的目的是删除历史记录中包含指定大文件的提交,并清理这些提交对应的索引。这是一个强大而有影响的操作,确保在执行之前备份你的仓库。同时,强制推送时要确保协作者知悉并同意,因为这会修改共享的历史。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?