mar*_*ker 6 git git-filter-branch
我需要从一个应该被忽略的旧仓库中删除一些Xcode文件.所以我运行了以下命令
git filter-branch --index-filter 'git rm -f --cached --ignore-unmatch *mode1v3 *pbxuser' HEAD
Run Code Online (Sandbox Code Playgroud)
我的理解是添加--cached不会影响当前的工作目录,但是git也删除了那些匹配的文件.幸运的是我有一个备份(!),但我很好奇为什么会这样做,或者我误解了什么--cached呢?
罪魁祸首不是git rm命令。它的--cached选项确实如您所说。你可以在一个小的 git repo 中轻松地尝试。
虽然手册页没有提到它,git filter-branch但似乎没有保留您的工作区。实际上,如果您的工作区域不干净,该命令将拒绝运行,这已经是一个迹象。
但即使文件从工作区消失,它们也不会从回购中消失。它们只是不再在您当前分支中可访问的任何提交中。但是过滤分支存储在重写以引用名称空间 refs/original/ 之前引用您的分支。
使用命令git show-ref查看。
您可以查看旧版本以访问已删除的文件。您可以使用 command
git cat-file blob refs/original/refs/heads/master:foo无需签出即可获取文件的内容(使用 show-ref 显示的引用,foo 是所需文件的名称)。有很多可能性
您可以使用gitk --all来浏览您重写的分支和当前的分支,您会看到什么都没有真正消失。
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |