gpt4 book ai didi

git - 为什么 filter-branch 上的 --cached 选项会从工作目录中删除文件?

转载 作者:太空狗 更新时间:2023-10-29 13:12:29 25 4
gpt4 key购买 nike

我需要从旧的存储库中删除一些本应被忽略的 Xcode 文件。所以我运行了以下命令

git filter-branch --index-filter 'git rm -f --cached --ignore-unmatch *mode1v3 *pbxuser' HEAD

我的理解是添加 --cached 不会影响当前工作目录,但 git 也会删除那些匹配的文件。幸运的是我有一个备份(!),但我很好奇它为什么这样做,或者我误解了 --cached 的作用?

最佳答案

罪魁祸首不是 git rm 命令。它的 --cached 选项确实如您所说。您可以在小型 git 存储库中轻松尝试。

虽然手册页没有提到,git filter-branch 似乎并没有保留你的工作区。实际上,如果您的工作区域不干净,该命令将拒绝运行,这已经是一个迹象。

但是即使文件从工作区消失了,它们也没有从仓库中消失。它们只是不再在您当前分支中可访问的任何提交中。但是过滤器分支存储在重写为引用 namespace refs/original/之前引用了您的分支。

使用命令git show-ref查看。

您可以查看旧版本以访问您删除的文件。你可以使用命令git cat-file blob refs/original/refs/heads/master:foo 无需 check out 即可获取文件内容(使用show-ref显示的引用,foo是想要的名字文件)。有很多可能性

您可以使用 gitk --all 浏览您重写的和当前的分支,您会发现没有任何东西真的消失了。

关于git - 为什么 filter-branch 上的 --cached 选项会从工作目录中删除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com