git filter-branch仅更改受影响的提交

时间:2012-05-31 19:39:15

标签: git git-filter-branch

一个大的二进制文件被添加到我的git存储库20提交之前。删除它:

git filter-branch --index-filter "git rm --cached --ignore-unmatch FILE" \
    --prune-empty HEAD

在项目历史记录中为每次提交(~1100)更改SHA1。它确实删除了文件,但我希望只有git push -f只有少量的修改提交。有没有办法告诉filter-branch只修改FILE和后代评论的提交,在我的情况下约20次提交?

1 个答案:

答案 0 :(得分:6)

如果你知道什么提交引入了文件,最简单的方法是指定$SHA^..HEAD(其中$SHA是引入它的提交)。这样可以防止它查看较旧的提交。

如果引入此文件的提交引入了它,并且没有其他提交,从那时起就触及它,那么你可以在没有filter-branch的情况下更简单地删除它,使用git rebase --onto $SHA^ $SHA(其中$SHA是引入此文件的提交)。这只会从历史记录中删除提交$SHA