撤消git update-index --skip-worktree

Kev*_*rke 127 git undo

前一段时间我这样做是为了忽略git跟踪的文件的变化:

git update-index --skip-worktree <file>
Run Code Online (Sandbox Code Playgroud)

现在我实际上想要提交对该文件的更改来源.如何撤消效果skip-worktree

谢谢,凯文

Kev*_*rke 170

啊哈!我只想要:

git update-index --no-skip-worktree <file>
Run Code Online (Sandbox Code Playgroud)

  • 我爱阿哈! (2认同)

Ste*_*nca 32

根据http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html,使用

git ls-files -v

查看标有特殊字母的"假设未更改"和"skip-worktree"文件."skip-worktree"文件标有S.

编辑:正如@amacleod提到的,创建一个别名来列出所有隐藏文件是一个很好的技巧,所以你不需要记住它.我alias hidden="git ls-files -v | grep '^S'"在.bash_profile中使用.它很棒!

  • 整齐.我可以使用`git ls-files -v | grep'^ S'`列出我用skip-worktree"隐藏"的文件.希望为该命令创建别名"隐藏",但在别名中放置管道重定向似乎不起作用. (8认同)
  • @amacleod使用`!`.像这样`[alias] ignored =!git ls-files -v | grep"^ S"`经过测试,有效. (4认同)
  • @SteveChambers,缺少安装 `grep`,我不知道。我猜这取决于你的外壳。我认为 Git Bash 确实带有“grep”。 (2认同)

C0D*_*F52 16

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

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
Run Code Online (Sandbox Code Playgroud)
  1. git ls-files -v 将打印所有文件及其状态
  2. grep -i ^S 将过滤文件并仅选择跳过工作树(S)或跳过工作树并假设未更改,-i表示忽略区分大小写
  3. cut -c 3- 将删除状态并仅留下路径,从第3个字符切换到结尾
  4. tr '\012' '\000' 将行尾字符(\ 012)替换为零字符(\ 000)
  5. xargs -0 git update-index --no-skip-worktree将所有以零字符分隔的路径传递git update-index --no-skip-worktree给undo


eXa*_*ier 8

基于@GuidC0DE 的回答,这里有一个 Powershell 版本(我使用posh-git

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})
Run Code Online (Sandbox Code Playgroud)

并参考相反的命令来隐藏文件:

git update-index --skip-worktree $(git ls-files --modified)
Run Code Online (Sandbox Code Playgroud)


yos*_*ico 7

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

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'
Run Code Online (Sandbox Code Playgroud)


use*_*648 5

对于那些使用 Tortoise Git 的人:

  1. 右键单击文件夹或特定文件,然后选择 TortoiseGit > Check for modifications
  2. 只检查Show ignore local changes flagged files。您应该看到您忽略的文件(或您忽略的所有文件,如果您右键单击了文件夹)
  3. 右键单击文件并选择 Unflag as skip-worktree and assume-unchanged