如何从几个git提交中追溯删除某些类型的文件

时间:2016-09-26 09:48:46

标签: git version-control git-filter-branch

我有一个小型的个人项目,它是一个git存储库,只有一个主分支和几个提交。 (19,实际上。)我发现我不小心在回购中包含了几个.psd文件。那发生在第7次提交。我在第17次提交时意识到了我的错误,并将.psd添加到了.gitignore。

如何从这些提交中追溯删除某些文件(在本例中为* .psd)?或者,如何从提交中删除其文件夹?

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD,根据this page

1 个答案:

答案 0 :(得分:0)

您的命令几乎看起来正确,除了您需要指定要应用过滤器分支的提交的范围。我担心,正如你现在写的那样,你可能会将它应用到你的整个历史中,这可能不是你想要的。假设您想要涵盖从包含.psd文件的提交到现在的范围,您将使用:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD~12..HEAD

我假设您有19次提交,其中HEAD~12将引用第7次提交。

<强>更新

如果您担心在使用filter-branch时破坏某些内容,请先将分支推送到远程作为备份:

git push origin your_branch

更好的是,推送到具有不同名称的分支,例如

git push origin your_branch:backup_branch

如果出现问题,您可以删除本地分支并再次从遥控器中拔出。