彻底删除本地 Git 历史记录 - 文件或目录

使用 git filter-branch 命令可以从本地 Git 历史记录中彻底删除特定文件或目录,包括所有包含它们的提交记录。

命令:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <file/dir>' --prune-empty --tag-name-filter cat -- --all

说明:

  • <file/dir>: 要删除的文件或目录的路径,可以使用通配符进行匹配。
  • --force: 强制执行命令,即使存在冲突。
  • --index-filter: 用于修改索引文件,git rm 命令将从索引中删除指定文件或目录。
  • --ignore-unmatch: 忽略未匹配的文件或目录。
  • --prune-empty: 删除空提交记录。
  • --tag-name-filter cat: 保留标签。
  • --all: 针对所有分支执行命令。

重要注意事项:

  • 该命令会修改 Git 历史记录,请确保在执行之前已备份好本地 Git 仓库。
  • 执行命令后,会生成新的提交记录,原有提交记录将被删除。
  • 如果该命令在公共仓库中执行,可能会影响其他协作者。

示例:

删除 tmp 文件夹和所有相关提交记录:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch tmp' --prune-empty --tag-name-filter cat -- --all

建议:

  • 在使用该命令之前,请仔细阅读 Git 文档,确保理解其工作原理和风险。
  • 如果需要保留历史记录,可以使用 git filter-branch --prune-empty --tag-name-filter cat -- --all 命令仅删除空提交记录。
  • 对于大型仓库,使用该命令可能需要较长时间,请耐心等待。
彻底删除本地 Git 历史记录 - 文件或目录

原文地址: https://www.cveoy.top/t/topic/j9K1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录