【问题标题】:git rm --cached and fatal: pathspecgit rm --cached 和致命的:pathspec
【发布时间】:2012-09-15 21:39:28
【问题描述】:

我刚刚尝试检查我的主分支并遇到了:

error: Untracked working tree file 'app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate' would be overwritten by merge. 

所以,我尝试从 git 中删除这个文件(我已经在 .gitignore 中添加了一个表达式来捕获它),使用:

git rm --cached app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate

得到:

fatal: pathspec 'app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate' did not match any files 

所以,有点不知所措。据我了解,工作文件不是这里的问题。但是,为了完整起见,确实存在工作文件。例如。

ls -l app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate
-rw-r--r--  1 u  u  56061 24 Sep 12:42 app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate

【问题讨论】:

  • 是什么让您认为工作树文件不是问题?错误消息说:“未跟踪的工作树文件......将被合并覆盖”。你是未跟踪的工作树文件是的问题; git 不想把它吹走,因为它包含未跟踪的工作更改。
  • 但是如果工作树文件没有被 git 跟踪,它会如何被覆盖呢?例如。 git rm --cached 说它不匹配任何文件。
  • 它必须是一个文件存在于您尝试移动到的分支中的该位置,即使它在您要移动的提交中不存在。这就是错误消息告诉您的内容。
  • 是的,谢谢。刚刚发布了一个答案,详细说明了我最终是如何解决的。

标签: git git-rm


【解决方案1】:

所以,解决办法是这样的:

该文件在当前分支 B 中未被跟踪

但它存在于我们尝试签出的分支 A 中,因此我们会收到警告说我们当前工作树中的文件将被覆盖(即使我们没有跟踪它)

所以:

  1. 删除分支 B 的现有目录中的文件(我最初只是将其移出工作树的某个位置以确保安全)

  2. 查看你想要的分支 - 即分支 A

  3. 使用以下方法将其从分支 A 中删除:

    git rm --cached app.xcodeproj/project.xcworkspace/xcuserdata/u.xcuserdatad/UserInterfaceState.xcuserstate

注意:Fwiw,分支 A 是我的主分支。 B 分支是我的开发分支。

【讨论】:

    【解决方案2】:

    对于题名中的问题,一般可以这样解决:

    git rm --cached *
    
    fatal: pathspec 'blah' did not match any files 
    
    git ls-files
    

    这将列出 git 在其索引中确实具有的文件,然后您可以将它们一一明确地删除。例如,如果它列出了img/blah.jpg:

    git rm --cached img/blah.jpg
    

    这将解决更一般情况下的 pathspec 错误,无论是此处其他答案中的分支问题,还是新的 .gitignore 条目,或者在同一目录中使用 2 个 repos 的结果等。

    【讨论】:

      【解决方案3】:

      简单:

      git add file.ext
      git rm --cached file.ext
      

      或

      git add path/*
      git rm --cached path/*
      

      【讨论】:

      • 为此+1,因为它导致了我为什么会收到此错误的真相。当我做git add some_file时,系统回复The following paths are ignored by one of your .gitignore files: some_file。 掌心
      【解决方案4】:

      试试 --ignore-unmatch 标志

      我在尝试使用通配符匹配取消跟踪 Git 已经跟踪的某些文件时遇到了同样的错误,并且由于有些文件似乎没有退出,所以我收到了文件不匹配的错误,这导致整个文件崩溃手术。所以我检查了手册并尝试了 --ignore-unmatch 标志,它就像一个魅力:

      $ git rm --cached --ignore-unmatch cron/*.json

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 2011-08-13
        • 2021-04-02
        • 2016-01-30
        • 2023-03-16
        相关资源
        最近更新 更多