我有一个小型的个人项目,它是一个git存储库,只有一个主分支和几个提交。 (19,实际上。)我发现我不小心在回购中包含了几个.psd文件。那发生在第7次提交。我在第17次提交时意识到了我的错误,并将.psd添加到了.gitignore。
如何从这些提交中追溯删除某些文件(在本例中为* .psd)?或者,如何从提交中删除其文件夹?
是git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.psd' HEAD
,根据this page?
答案 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
如果出现问题,您可以删除本地分支并再次从遥控器中拔出。