代码之家  ›  专栏  ›  技术社区  ›  Snowcrash

git-rm—缓存和致命:路径规范

  •  27
  • Snowcrash  · 技术社区  · 12 年前

    我刚试着结账,结果遇到了:

    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
    
    5 回复  |  直到 10 年前
        1
  •  18
  •   Snowcrash    12 年前

    因此,解决方案是:

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

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

    因此:

    1. 删除分支B的现有目录中的文件(为了安全起见,我最初只是把它从工作树中移到了某个地方)

    2. 查看您想要的分支机构,即分支机构A

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

      git-rm—缓存的应用程序.xcodeproj/project.xcworkspace/xuserdata/u.xuserdatad/UserInterfaceState.xcuserstate

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

        2
  •  11
  •   Chris Moschini    10 年前

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

    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个repo的结果,等等。

        3
  •  6
  •   mariovials    7 年前

    简单:

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

    git add path/*
    git rm --cached path/*
    
        4
  •  2
  •   Loukan ElKadi    4 年前

    Try-忽略取消匹配标志

    当我试图使用通配符匹配来取消跟踪一些已经被Git跟踪的文件时,我也遇到了同样的错误,由于有些文件似乎无法退出,我遇到了文件不匹配的错误,这导致整个操作崩溃。所以我查看了手册并尝试 --忽略取消匹配 旗帜,它就像一个符咒:

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

        5
  •  0
  •   AidinZadeh    3 年前

    如果您的文件来自以前的提交,则需要从以前的提交中删除所有文件。

    git filter-branch --force --index-filter \
      'git rm -r --cached --ignore-unmatch PATH_TO_FILES_TO_REMOVE' \
      --prune-empty --tag-name-filter cat -- --all