last changes git undo

changes - Deshacer git update-index--skip-worktree



git undo merge (4)

Aha! Simplemente quiero:

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

Hace un tiempo, hice esto para ignorar los cambios en un archivo rastreado por git:

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

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

Gracias, Kevin


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 referencia también el comando opuesto para ocultar los archivos:

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


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

git ls-files -v

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

Editar : como se mencionó en @amacleod , crear un alias para enumerar todos los archivos 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 archivos que se aplicó skip worktree, puede usar 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 filtrará archivos 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 rutas, cortando desde el 3er carácter hasta el final
  4. tr ''/012'' ''/000'' reemplazará el carácter de fin de línea (/ 012) a cero (/ 000)
  5. xargs -0 git update-index --no-skip-worktree pasará todas las rutas separadas por cero caracteres a git update-index --no-skip-worktree para deshacer