Git从一系列提交中删除文件

时间:2016-01-12 13:50:16

标签: git git-rewrite-history

我需要在某些提交中从我的repo中删除一个文件夹。它已在提交a中添加,并在提交b中删除,并在提交c中再次作为子模块添加。 现在我想从(包括)ab之间的提交中删除它。

我必须做以下事情:

git filter-branch --index-filter 'git update-index --remove lib --ignore-submodules' 7a08959f87681decc15ad5a272bbada66c3272e8 goodbye_cmake

但我不知道如何添加结尾(b)。它会从a到最后一次提交goodbye_cmake(即HEAD)的所有提交中删除它...那么我需要更改的是在最后几次(~30)提交中我仍然拥有子模块?< / p>

谢谢你所有的时间!
- Fodinabor

2 个答案:

答案 0 :(得分:1)

BFG是filter-branch的一个很好的替代品,它是blessed by github。它只会更改您的历史记录,并且不会删除项目中当前存在的任何文件,因此它应该删除旧目录,直到您想要提交b。调用最终看起来像:

java -jar bfg.jar --delete-folders directory_name your_repo.git

答案 1 :(得分:0)

除非我对这个问题有误解,否则您几乎已经有了答案:

$ git filter-branch --index-filter 'git update-index --remove tests/files/ceac_analysis_data_* --ignore-submodules'  10e8e892b49a4657a3b36ef4ca0a524b8a26a438..HEAD 

所以语法是

$ git filter-branch *options* a..b

代替

$ git filter-branch *options* a b`