【发布时间】:2020-06-06 23:48:51
【问题描述】:
我希望从 git 历史记录中删除文件夹的内容(可以递归地拥有文件夹)。但是,一些较旧的提交甚至没有该文件夹,而一些较新的提交在该文件夹中有我想要保留的文件。
假设文件夹是 foo(在路径 /path/to/foo 中),要保留的文件称为 bar1 和 bar2(例如,/path/to/foo/bar1)。
我意识到这个问题并不新鲜。在this question 中,使用了一个冗长且难以阅读(至少对于初学者而言)的脚本。 This question 是最新的并使用 git filter-branch 但我不明白最终的解决方案是什么。最后,this question 可能是最相似的,但对于没有 git 高级知识的人来说,答案并不是“剖析”,所以我没有信心尝试这些命令。
据我所见,目前 git 2.17 的方法是为每个分支使用git filter-branch。然后使用tree-filter 或index-filter (从文档中我无法看到用例的差异)。最后是一个git rm 命令,其正则表达式与foo 的内容匹配,bar 除外。正则表达式的第一部分可能很简单 (/path/to/foo/*),但我不确定如何添加例外。
如果有人能在提供解决此问题的命令时将这一切分解,我将不胜感激。
【问题讨论】:
标签: git git-filter-branch