Deshacer git update-index --skip-worktree


148

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

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

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


11
También estoy interesado en cómo obtener la lista de archivos en estado 'skip-worktree'?
troex

Respuestas:



35

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 el árbol de trabajo" marcados con una letra especial. Los archivos "skip-worktree" están marcados con S.

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


9
Ordenado. Puedo usar git ls-files -v | grep '^S'para enumerar 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

55
@amacleod usa a !. Como este [alias] ignored = !git ls-files -v | grep "^S"Probado, funciona.
Steven Lu

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

1
@SteveChambers, corto de instalación grep, no lo sé. Depende de tu caparazón, supongo. Git Bash viene con grep, creo.
amacleod

1
Brillante, gracias @amacleod, simplemente no estaba en mi camino. Lo único que necesitaba cambiar para que esto funcionara en Windows era el estilo de cotización - 'no funcionó pero "sí, es decirgit ls-files -v | grep "^S"
Steve Chambers

17

Si desea deshacer todos los archivos que se aplicaron, omita el árbol de trabajo, 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á los archivos y seleccionará solo omitir worktree (S) u omitir worktree y asumir que no ha cambiado (s), -i significa ignorar mayúsculas y minúsculas
  3. cut -c 3- eliminará el estado y dejará solo rutas, cortando desde el tercer carácter hasta el final
  4. tr '\012' '\000' reemplazará el carácter de final de línea (\ 012) a cero (\ 000)
  5. xargs -0 git update-index --no-skip-worktreepasará todos los caminos separados por cero caracteres git update-index --no-skip-worktreea deshacer

1
Esta es la mejor respuesta
Dev

¡Esta respuesta es oro puro!
yossico

7

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

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

3

Para aquellos que usan Tortoise Git:

  1. Haga clic derecho en la carpeta o en el archivo específico, luego elija TortoiseGit > Check for modifications
  2. Solo consultar Show ignore local changes flagged files. Debería ver el archivo que ignoró (o todos los archivos que ignoró, si hizo clic derecho en la carpeta)
  3. Haga clic derecho en el archivo y elija Unflag as skip-worktree and assume-unchanged

3

Para todos los que aman los alias de Bash, aquí está mi conjunto para gobernarlos a todos (basado en 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'

0

Esta respuesta está dirigida a personas menos técnicas que usan Windows.

Si no recuerda / sabe en qué archivos hizo clic en "skip-worktree", utilice:

git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 

git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".

Para solucionar su problema:

Puede ir a los archivos -> hacer clic con el botón derecho -> restaurar a una versión anterior -> hacer clic en la pestaña "git" en la parte superior -> desmarcar la casilla de verificación "skip-worktree" -> hacer clic en "Aplicar" en la parte inferior.

Si los archivos son demasiados para arreglarlos a mano, entonces deberá consultar las otras respuestas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.