撤消git更新索引--跳过工作树

撤消git更新索引--跳过工作树,git,undo,Git,Undo,不久前,我这样做是为了忽略对git跟踪的文件所做的更改: git update-index --skip-worktree <file> git更新索引--跳过工作树 现在,我实际上想将对该文件的更改提交给源代码。如何撤消跳过工作树的效果?啊哈!我只想: git update-index --no-skip-worktree <file> git更新索引--不跳过工作树 根据,使用 git ls文件-v 查看标有特殊字母的“假定未更改”和“跳过工作树”文件。“跳过工

不久前,我这样做是为了忽略对git跟踪的文件所做的更改:

git update-index --skip-worktree <file>
git更新索引--跳过工作树
现在,我实际上想将对该文件的更改提交给源代码。如何撤消跳过工作树的效果?

啊哈!我只想:

git update-index --no-skip-worktree <file>
git更新索引--不跳过工作树
根据,使用

git ls文件-v

查看标有特殊字母的“假定未更改”和“跳过工作树”文件。“跳过工作树”文件标记为
S


编辑:如前所述,使用别名列出所有隐藏文件是一个很好的技巧,这样您就不需要记住它。我在我的.bash_配置文件中使用了
alias hidden=“git ls files-v | grep'^S'
。它工作得很好

如果要撤消应用跳过工作树的所有文件,可以使用以下命令:

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
  • git ls files-v
    将打印所有文件及其状态
  • grep-i^S
    将筛选文件并仅选择跳过工作树或跳过工作树并假定未更改,-我的意思是忽略区分大小写的文件
  • cut-c3-
    将删除状态并只留下路径,从第三个字符剪切到最后
  • tr'\012'\000'
    将行尾字符(\012)替换为零字符(\000)
  • xargs-0 git更新索引--no skip worktree
    将所有以零字符分隔的路径传递给
    git更新索引--no skip worktree
    以撤消

  • 基于@GuidC0DE-answer,这里是Powershell的一个版本(我使用)

    以及隐藏文件的相反命令,以供参考:

    git update-index --skip-worktree $(git ls-files --modified)
    

    对于使用乌龟Git的用户:

  • 右键单击文件夹或特定文件,然后选择
    TortoiseGit>Check for modifications
  • 仅选中“显示忽略本地更改标记的文件”。您应该会看到您忽略的文件(或您忽略的所有文件,如果您右键单击该文件夹)
  • 右键单击文件并选择
    Unflag as skip worktree并假定未更改

  • 对于所有喜欢Bash别名的人,这里是我的一套规则(基于C0DEF52)


    这个答案针对的是使用Windows的技术含量较低的人

    如果您不记得/不知道单击了“跳过工作树”的文件,请使用:

    git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 
    
    git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".
    
    要解决您的问题:

    您可以进入文件->右键单击->恢复到以前的版本->单击顶部的“git”选项卡->取消选中“跳过工作树”复选框->单击底部的“应用”


    如果文件太多,无法手动修复,则需要参考其他答案。

    我还对如何获取“跳过工作树”状态的文件列表感兴趣?@troex-Neat。我可以使用
    git ls files-v | grep'^S'
    只列出我用skip-worktree“隐藏”的文件。希望将该命令的别名设置为“隐藏”,但在别名中设置管道重定向似乎不起作用。@amacleod使用
    。像这样
    [alias]被忽略=!git ls files-v | grep“^S”已测试,有效。@amacleod不认为你能为Windows建议一个替代命令?@SteveChambers,除了安装
    grep
    ,我不知道。我想这要看你的外壳了。我认为Git Bash确实与grep一起出现了。太棒了,谢谢@amacleod-只是我不喜欢。我唯一需要更改的是引号样式-
    不起作用,但
    起作用,即
    git ls files-v | grep“^S“
    这是最好的答案。这个答案是纯金的!我喜欢啊哈!谁会打伊塔哈!=尤里卡!:我本可以编出来的!为什么最好的答案在页面底部
    alias gitskip='git update-index --skip-worktree ' #path to file(s)
    alias gitlistskiped='git ls-files -v | grep ^S'
    alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
    alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'
    
    git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 
    
    git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".