前一段时间我这样做是为了忽略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)
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中使用.它很棒!
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)
git ls-files -v
将打印所有文件及其状态grep -i ^S
将过滤文件并仅选择跳过工作树(S)或跳过工作树并假设未更改,-i表示忽略区分大小写cut -c 3-
将删除状态并仅留下路径,从第3个字符切换到结尾tr '\012' '\000'
将行尾字符(\ 012)替换为零字符(\ 000)xargs -0 git update-index --no-skip-worktree
将所有以零字符分隔的路径传递git update-index --no-skip-worktree
给undo基于@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)
对于所有喜欢 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)
对于那些使用 Tortoise Git 的人:
TortoiseGit > Check for modifications
Show ignore local changes flagged files
。您应该看到您忽略的文件(或您忽略的所有文件,如果您右键单击了文件夹)Unflag as skip-worktree and assume-unchanged