¿Cómo puedo descartar el cambio de archivo desde la ventana de estado de fugitivos?

33

Cuando está en la ventana de estado del complemento fugitivo , al que se accede usando , es posible diferenciar los cambios para un archivo usando y alternar archivos para confirmar usando .:GstatusD-

¿Hay algún atajo similar para descartar cambios, con el descarte me refiero al equivalente de git checkout -- filename?

Actualizar:

Se encontró una solicitud de función en la página de github de fugitivos Problema # 97: acceso directo para retirar / eliminar archivos

De acuerdo con eso, la forma preferida es usar :Gread :w

Actualización 2:

Desde junio de 2014 es posible usar Usegún lo respondido por Anson a continuación .

Actualización 3: desde el 3 de enero de 2019, la combinación de teclas está asignada aX

tidbeck
fuente

Respuestas:

27

Esta funcionalidad se agregó en junio de 2014 y está asignada de forma predeterminada a U.

Esta información se encuentra en el archivo de ayuda en :h :Gstatus:

     U     |:Git| checkout HEAD

Solicitud de funciones y discusión:
https://github.com/tpope/vim-fugitive/issues/97

Comprometerse:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63

Anson
fuente
Si eso no está documentado, podría interpretarse como inseguro. ¿No sería difícil descubrir que golpeaste tus cambios locales debido a una pulsación mágica indocumentada?
sehe
2
Actualización de 2019 ahora esX
Oguz Bilgic
Alguien con privilegio de edición, ¿puede editarlo en X?
chriz
15

Puede usar el comando fugitivoGread para reemplazar el contenido de un búfer con varias versiones alternativas del archivo del búfer (es decir, esto debe hacerse desde el búfer de un archivo, no desde el :Gstatusbúfer).

  • :Gread(sin argumento) usará la versión del archivo del índice .
  • :Gread - utilizará la versión del archivo de la confirmación HEAD.

Consulte la documentación en :help fugitive-revisionpara obtener una lista de otras especificaciones de revisión que admite fugitivos (las dos anteriores son probablemente las más útiles de inmediato).

El :Greadflujo de trabajo procede así:

  1. :Gread
  2. fugitivo borra el búfer actual y lee el contenido del índice
  3. Resultado : el búfer ahora tiene el mismo contenido que el índice. El archivo del árbol de trabajo no cambia.
  4. Puede realizar un seguimiento :wpara guardar el archivo en el árbol de trabajo (o usarlo :Gread|wsi sabe que querrá guardarlo de inmediato).

El :Git checkout -- %flujo de trabajo procede así:

  1. :Git checkout -- %
  2. Git copia la versión del archivo en el índice al archivo en el árbol de trabajo.
  3. Vim se da cuenta de que el archivo ha sido cambiado fuera del editor y le solicita que lo ignore o lo vuelva a cargar.
  4. Le dices a Vim que vuelva a cargar el archivo.
  5. Resultado : tanto el archivo de árbol de trabajo como el búfer ahora tienen el contenido del índice.

Resumen: :Greadevita que aparezca el mensaje "el archivo ha cambiado desde que comenzó la edición" y le permite decidir cuándo desea modificar el archivo en el árbol de trabajo.


Cuando el búfer representa una etapa de índice del archivo en lugar del archivo del árbol de trabajo, :Greadlee el contenido del archivo tal como existe en el disco en el árbol de trabajo en lugar de la etapa 0 del índice.

Chris Johnsen
fuente
Mapeo de gstatus para revertir el archivo:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
1

Mapeo de gstatus para revertir el archivo:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
fuente
esto funciona muy bien, el único inconveniente es que obtendré el cuadro de diálogo que el archivo ha cambiado en el disco y si quiero volver a cargarlo. Sería bueno si estuviera en silencio.
tidbeck 01 de
1
Eso es incluso mejor IMO ya que obtienes la confirmación de que el archivo se revierte. Pero la recarga silenciosa automática se puede hacer con la opción 'autoread' ( :help autoread). Aparte de lo que podrías bufdo edentro de arriba au.
majkinetor 01 de
0

Bueno, ¿lo intentaste :help fugitive?

Aparentemente no, no hay atajos para esta función de Git.

romainl
fuente
Sí, lo hice. Ha habido momentos en que no he encontrado una característica en la ayuda que haya estado presente. ¿Es su opinión que nunca debe preguntar acerca de una función que no está en la ayuda del programa / complemento?
tidbeck
Sí, a mí también me sucedió: había una función que podía :callpero que no tenía un comando asociado. No recuerdo el nombre del complemento ... ¿Alinear? Lo que sea, mi opinión es que uno debería leer los documentos antes de preguntar. Lo que hiciste. Eso es genial. Pero el segundo paso lógico, después de leer los documentos, sería IMO para mirar la fuente del complemento y ver si hay alguna función útil allí. Que deberías hacer. Pero, AFAIK, fugitivo no se ocupa git checkouten absoluto, por lo que sus posibilidades son escasas. Probablemente deba recurrir a :!git checkout -- filename.
romainl
Ok, gracias por la aclaración. Creo que hace un punto válido con respecto a echar un vistazo al código fuente, pero al mismo tiempo si la información solo está disponible en el código fuente, podría ser un control de calidad válido aquí. Aceptará su respuesta y continuará usando :Git checkout -- %.
tidbeck
0

Aunque no tiene nada que ver con vim, pensé en decirte que a veces lo hago:

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

terminando el trabajo rápidamente.

Valer
fuente