撤消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
-
git ls-files -v
会打印所有文件的状态 -
grep -i ^S
将过滤文件并select仅跳过工作树(S)或跳过工作树并假定不变(-s),-i表示忽略区分大小写 -
cut -c 3-
将删除状态并保留唯一的path,从第三个字符切到末尾 -
tr '\012' '\000'
会将换行符(\ 012)replace为零字符(\ 000) -
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)