我想删除很久以前制作的Git存储库中特定文件的修订历史记录。目标是使文件看起来像是从未为特定修订提交。有谁知道如何做到这一点?谢谢!
答案 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
这会在当前分支之上创建一个新提交,它会反转在指定提交中所做的所有更改。