使用 gitpython 从 git 中删除文件

delete files from git using gitpython

我需要以编程方式从 git 中删除特定文件的所有版本(包括文件更新时的提交消息)。这些版本可能分散在整个提交列表中。

示例:如果总共有 10 次提交,并且有问题的文件在提交 3、4 和 7 时更新。我需要从提交 3 开始删除文件并删除提交 3、4 时的提交消息, 和 7.

如果提交历史如下,X 标记我要与文件一起从提交历史中删除的提交。

O - O - X - X - O - O - X - O - O - O
  1. 这可能吗?
  2. 如果是,以编程方式执行此操作的最简单方法是什么? 我知道 GitPython 对此没有任何内置功能,但它确实允许使用 python.
  3. 在 shell 上执行 运行 个 git 命令

对我有用的解决方案是 git 命令:"git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch foo.txt' --msg-filter 'sed "s/foo.txt/DELETED/g"'

这条命令有两部分:

  1. index-filter 'git rm --cached --ignore-unmatch foo.txt' - 这个 删除名为 foo.txt
  2. 的文件的所有版本
  3. msg-filter 'sed "s/foo.txt/DELETED/g"' - 这会更改包含文件名 foo.txt 的提交消息,以指定该文件已被删除

此命令删除 foo.txt 并更改包含 foo.txt 的提交消息以指定文件已被删除。

感谢@unutbu 为我指出所需的过滤器分支选项。