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
?
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
?
Respuestas:
¡Ajá! 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 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!
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.
!
. Como este [alias] ignored = !git ls-files -v | grep "^S"
Probado, funciona.
grep
, no lo sé. Depende de tu caparazón, supongo. Git Bash viene con grep
, creo.
'
no funcionó pero "
sí, es decirgit ls-files -v | grep "^S"
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
git ls-files -v
imprimirá todos los archivos con su estadogrep -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úsculascut -c 3-
eliminará el estado y dejará solo rutas, cortando desde el tercer carácter hasta el finaltr '\012' '\000'
reemplazará el carácter de final de línea (\ 012) a cero (\ 000)xargs -0 git update-index --no-skip-worktree
pasará todos los caminos separados por cero caracteres git update-index --no-skip-worktree
a deshacerBasado 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)
Para aquellos que usan Tortoise Git:
TortoiseGit > Check for modifications
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)Unflag as skip-worktree and assume-unchanged
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'
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.