2012-06-21 15 views
83

Hace un tiempo hice esto para ignorar los cambios en un archivo de seguimiento por git:Deshacer git actualización del índice --skip-worktree

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

Ahora realmente quieren confirmar los cambios en ese archivo a la fuente. ¿Cómo puedo deshacer los efectos de skip-worktree?

Gracias, Kevin

+7

También me interesa saber cómo obtener la lista de archivos en estado 'skip-worktree'? – troex

+0

@troex https://stackoverflow.com/q/42363881/1615903 – 1615903

Respuesta

107

Aha! Simplemente quiero:

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

¡Me encanta el Aha! –

+0

lol debería ser conocido –

29

Según http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html, utilice

git ls-files -v

ver el "asumen sin cambios" y archivos "skip-worktree" marcados con una letra especial. Los archivos "skip-worktree" están marcados con S.

Editar: Como @amacleod mencionado, haciendo un alias a la lista todos los archivos ocultos es un buen truco para tener de manera que no es necesario que lo recuerde. Yo uso alias hidden="git ls-files -v | grep '^S'" en mi .bash_profile. ¡Funciona genial!

+8

Neat. Puedo usar 'git ls-files -v | grep '^ S'' para listar solo los archivos que he "ocultado" con skip-worktree. Esperaba hacer un alias "oculto" para ese comando, pero poner una redirección de tubería en el alias no parecía funcionar. – amacleod

+4

@amacleod usa un '!'. Me gusta esto '[alias] ignorado =! Git ls-files -v | grep "^ S" 'Probado, funciona. –

+0

@amacleod ¿No crees que podrías sugerir un comando alternativo para Windows? –

11

Si desea deshacer todos los archivos que se aplicó worktree salto, puede utilizar el siguiente comando:

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 archivos con su estado
  2. grep -i ^S va a filtrar los archivos y seleccione solo omita worktree (S) u omita worktree y asuma sin cambios (s), -i significa ignorar mayúsculas y minúsculas
  3. cut -c 3- eliminará el estado y dejará solo las rutas, cortando desde el carácter 3-end hasta el final
  4. tr '\012' '\000' reemplazará carácter de fin de línea (\ 012) a cero carácter (\ 000)
  5. xargs -0 git update-index --no-skip-worktree pasará todas las trayectorias separadas por el carácter cero a git update-index --no-skip-worktree para deshacer
+0

Este es el la mejor respuesta – Dev

0

Basado en @ GuidC0DE respuesta, aquí está una versión para Powershell (utilizo posh-git)

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

Y como referencia también el comando opuesto para ocultar los archivos:

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