从Git历史记录中删除具有其历史记录的特定文件

时间:2010-09-10 15:19:13

标签: git git-svn

我想删除很久以前制作的Git存储库中特定文件的修订历史记录。目标是使文件看起来像是从未为特定修订提交。有谁知道如何做到这一点?谢谢!

2 个答案:

答案 0 :(得分:2)

听起来像你想要git filter-branch

但是,请务必考虑手册页上的警告:

  

警告!重写的历史将会   为所有人提供不同的对象名称   对象,不会收敛   原来的分支。你不会   能够轻松推送和分发   重写分支在上面   原始分支。请不要使用   如果你不知道这个命令   完整的含义,并避免使用它   无论如何,如果一个简单的单一提交   足以解决您的问题。   (参见“从上游回收   REBASE“git-rebase(1)中的部分   有关重写的更多信息   出版历史。)

手册页的"Examples"部分显示了如何删除给定文件的历史记录。这应该是一个很好的起点。

  

假设您要删除文件   (包含机密信息   或侵犯版权)   承诺:

     

git filter-branch --tree-filter 'rm filename' -- --all

答案 1 :(得分:0)

如果你确实想要从历史记录中删除提交,那么filter-branch就可以了,正如Tim Henigan所说的那样。但是,他从联机帮助页引用的警告是有充分理由的,很可能您可以找到另一种解决方案。

要反转单个提交的效果,您只需使用:

git revert <commit>        # that's the SHA1 hash of the commit

这会在当前分支之上创建一个新提交,它会反转在指定提交中所做的所有更改。