从git历史记录中删除提交

时间:2014-04-20 13:04:47

标签: git git-rebase

我发现我有一个文件致力于我的回购年前,我从来不想在那里。 在我公开回购之前,我想恢复,或者实际删除引入此文件的提交,以便没有人能够访问此文件。

我已经使用了交互式rebase,因此我可以删除不需要的提交。它看起来很有希望但是在应用了800次提交后,就会发生冲突。

冲突是由非线性历史引起的 - 在两个分支中都有一个分支和一个文件被修改(比如feature1和feature2)。据我所知git rebase试图使这个并行历史线性化并且在那些平行的,相互矛盾的修改中失败了。我不想尝试修复它,因为还有更多这样的情况,修复所有这些情况将是一项巨大的努力。

所以我的问题是:是否可以简单地删除一个重建分支历史的提交而不影响其他提交?

我的文件已添加一次,但从未修改过,因此其他提交都没有触及它。

1 个答案:

答案 0 :(得分:2)

您可以尝试filter-branch命令。

git filter-branch --prune-empty --tree-filter 'rm <filename-to-delete> || true' HEAD

如果错误的提交刚刚添加了要删除的文件,则将跳过整个提交(选项--prune-empty)。

我用一个带有分支和合并的简单仓库测试了这个,并且合并得非常巧妙。所以你不应该期待冲突。先生,filter-branch也会创建一个备用分支。 : - )