无法从Git历史记录中删除目录
我们有几个项目有一个公共/上传目录,客户使用该目录存储图像/PDF/等,这存在于我们刚刚移动到/正在学习git时添加的每个项目repo中,我现在希望将其添加到.gitignore中 作为测试,我正在尝试删除“开发”分支中单个项目中的目录 我正在使用的命令:无法从Git历史记录中删除目录,git,Git,我们有几个项目有一个公共/上传目录,客户使用该目录存储图像/PDF/等,这存在于我们刚刚移动到/正在学习git时添加的每个项目repo中,我现在希望将其添加到.gitignore中 作为测试,我正在尝试删除“开发”分支中单个项目中的目录 我正在使用的命令: git filter-branch --tree-filter "git rm -rf --cached --ignore-unmatch public/uploaded" 生成如下输出: rm 'public/uploaded/image
git filter-branch --tree-filter "git rm -rf --cached --ignore-unmatch public/uploaded"
生成如下输出:
rm 'public/uploaded/image_1.jpg'
rm 'public/uploaded/image_2.jpg'
rm 'public/uploaded/image_3.jpg'
rm 'public/uploaded/image_4.jpg'
rm 'public/uploaded/image_5.jpg'
但最后以:
WARNING: Ref 'refs/heads/develop' is unchanged
为什么这个命令不起作用,我如何才能成功地从历史记录中删除目录,但在添加到.gitignore之前保留文件?您正在尝试将对索引进行操作的-cached与使用工作目录的-tree filter相结合
试一试
您可能还想考虑添加-修剪空。
注意Git不跟踪目录。一旦从某个目录中删除所有文件,它就会自动从git中消失。换句话说,在git中跟踪空目录是不可能的。这已经奏效了。这是因为-tree-filter签出或提交工作目录,将该目录中的当前现有文件放入旧的提交中吗?我相信tree-filter会提交工作目录的状态,这在原始示例中是不变的。如果删除'-cached',它也会起作用,但是索引过滤器形式要比树过滤器快得多。git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch public/uploaded"