我需要以编程方式从git中删除特定文件的所有版本(包括更新文件时的提交消息)。版本可以分散在整个提交列表中。
示例:如果总共有10次提交,并且在提交3,4和7中更新了相关文件。我需要从提交3开始删除该文件并删除提交3,4和提交消息7.
如果提交历史记录如下,X
标记我要从提交历史记录中删除的提交以及文件。
O - O - X - X - O - O - X - O - O - O
答案 0 :(得分:1)
对我有用的解决方案是git命令:"git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch foo.txt' --msg-filter 'sed "s/foo.txt/DELETED/g"'
此命令包含两部分:
index-filter 'git rm --cached --ignore-unmatch foo.txt'
- 这个
删除名为foo.txt msg-filter 'sed "s/foo.txt/DELETED/g"'
- 这会改变包含文件名foo.txt的提交消息,以指定文件已被删除此命令删除foo.txt并更改包含foo.txt的提交消息,以指定该文件已被删除。
感谢@unutbu指向我所需的过滤器分支选项。