Deshacer git update-index –skip-worktree

Hace un time, hice esto para ignorar los cambios en un file rastreado por git:

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

Ahora realmente quiero enviar cambios a ese file a la fuente. ¿Cómo puedo deshacer los efectos de skip-worktree ?

Gracias, Kevin

Aha! Simplemente quiero:

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

De acuerdo con http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html , use

git ls-files -v

para ver los files "asumir sin cambios" y "omitir-tree de trabajo" marcados con una letra especial. Los files "skip-worktree" están marcados con S

Editar : como se mencionó en @amacleod , crear un alias para enumerar todos los files ocultos es un buen truco para que no tenga que recordarlo. Yo uso alias hidden="git ls-files -v | grep '^S'" en mi .bash_profile. ¡Funciona genial!

Si desea deshacer todos los files que se aplicó skip worktree, puede usar el siguiente command:

 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 imprimirá todos los files con su estado
  2. grep -i ^S filtrará files y seleccionará solo omitir worktree (S) u omitir worktree y asumir sin cambios (s), -i significa ignorar mayúsculas y minúsculas
  3. cut -c 3- eliminará el estado y dejará solo las routes, cortando desde el 3er carácter hasta el final
  4. tr '\012' '\000' replaceá el carácter de fin de línea (\ 012) a cero (\ 000)
  5. xargs -0 git update-index --no-skip-worktree pasará todas las routes separadas por cero caracteres a git update-index --no-skip-worktree para deshacer

Basado en la respuesta @ GuidC0DE, aquí hay una versión para Powershell (uso posh-git )

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

Y como reference también el command opuesto para ocultar los files:

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