撤消git更新索引--跳过工作树
不久前,我这样做是为了忽略对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 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".