我发现我有一个文件致力于我的回购年前,我从来不想在那里。 在我公开回购之前,我想恢复,或者实际删除引入此文件的提交,以便没有人能够访问此文件。
我已经使用了交互式rebase
,因此我可以删除不需要的提交。它看起来很有希望但是在应用了800次提交后,就会发生冲突。
冲突是由非线性历史引起的 - 在两个分支中都有一个分支和一个文件被修改(比如feature1和feature2)。据我所知git rebase
试图使这个并行历史线性化并且在那些平行的,相互矛盾的修改中失败了。我不想尝试修复它,因为还有更多这样的情况,修复所有这些情况将是一项巨大的努力。
所以我的问题是:是否可以简单地删除一个重建分支历史的提交而不影响其他提交?
我的文件已添加一次,但从未修改过,因此其他提交都没有触及它。
答案 0 :(得分:2)
您可以尝试filter-branch
命令。
git filter-branch --prune-empty --tree-filter 'rm <filename-to-delete> || true' HEAD
如果错误的提交刚刚添加了要删除的文件,则将跳过整个提交(选项--prune-empty)。
我用一个带有分支和合并的简单仓库测试了这个,并且合并得非常巧妙。所以你不应该期待冲突。先生,filter-branch
也会创建一个备用分支。 : - )