Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从Git历史记录中删除目录_Git - Fatal编程技术网

无法从Git历史记录中删除目录

无法从Git历史记录中删除目录,git,Git,我们有几个项目有一个公共/上传目录,客户使用该目录存储图像/PDF/等,这存在于我们刚刚移动到/正在学习git时添加的每个项目repo中,我现在希望将其添加到.gitignore中 作为测试,我正在尝试删除“开发”分支中单个项目中的目录 我正在使用的命令: git filter-branch --tree-filter "git rm -rf --cached --ignore-unmatch public/uploaded" 生成如下输出: rm 'public/uploaded/image

我们有几个项目有一个公共/上传目录,客户使用该目录存储图像/PDF/等,这存在于我们刚刚移动到/正在学习git时添加的每个项目repo中,我现在希望将其添加到.gitignore中

作为测试,我正在尝试删除“开发”分支中单个项目中的目录

我正在使用的命令:

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"