从git版本中删除特定的文件/文件夹

时间:2012-07-15 16:21:51

标签: git

假设我发现有些文件没有被认为是我的git修订版。如密码,API密钥和商业机密文件。

有没有办法删除它们出现的修订中的那些文件?并且仍然保留该修订版中的其余文件吗?

1 个答案:

答案 0 :(得分:1)

git filter-branch可能有用。这允许您重写一系列过去的提交,改变提交的内容。

如果您所做的更改从未离开过您的本地存储库,那么这将有效。如果你已经在某个地方推动了有害的变更,或者如果有人从你那里撤下了这些变更,那么你在每个人的存储库中摆脱它们会有更大的问题。

但是,要修复本地存储库:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch bad-file1.txt bad-file2.txt' master..abc

这意味着:

  • git filter-branch :让我们重写一些提交!

  • --index-filter :更改每个提交的索引,而不在磁盘上实际检查它。

  • 'git rm --cached --ignore-unmatch bad-file1.txt bad-file2.txt' :对于每次提交,请取消暂存这两个文件。

  • master..abc :在分支abc的所有提交上执行此操作,返回到从主分支分支的位置。你也可以说" master~3"重写过去的3次提交,或任何其他range of revisions。您还可以使用" -- --all" (两个破折号,空格,两个破折号,"所有")来重写存储库中的所有内容。