撤消git update-index –skip-worktree

前一阵子,我做了这个忽略git跟踪文件的变化:

git update-index --skip-worktree <file> 

现在我真的想提交对该文件的更改来源。 如何撤销skip-worktree的效果?

谢谢,凯文

啊哈! 我只是想要:

 git update-index --no-skip-worktree <file> 

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

git ls-files -v

看到标有特殊字母的“假定不变”和“跳过工作树”文件。 “skip-worktree”文件标有S

编辑 :正如@amacleod提到的,制作一个别名列出所有隐藏的文件是一个很好的技巧,以便您不必记住它。 我在我的.bash_profile中使用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 
  1. git ls-files -v会打印所有文件的状态
  2. grep -i ^S将过滤文件并select仅跳过工作树(S)或跳过工作树并假定不变(-s),-i表示忽略区分大小写
  3. cut -c 3-将删除状态并保留唯一的path,从第三个字符切到末尾
  4. tr '\012' '\000'会将换行符(\ 012)replace为零字符(\ 000)
  5. xargs -0 git update-index --no-skip-worktree会传递所有以零字符分隔的path到git update-index --no-skip-worktree来取消

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

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

并且还可以参考相反的命令来隐藏这些文件:

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