¿Cómo detengo un commit de Git cuando VI está en la pantalla esperando un mensaje de commit?

203

Le pedí a Git que realizara un commit desde git bash. Ha aparecido VI como siempre lo hace.

Ahora deseo cancelar la confirmación, ¿cómo evito proceder con la confirmación desde este punto?

Ben Aston
fuente
Vale la pena agregar que necesita presionar Esc antes de ingresar :q!para salir de vim.
M_Merciless

Respuestas:

332

Tienes dos opciones:

  • Proporcione un mensaje de confirmación vacío. Si se trata de una nueva confirmación y aún no ha guardado el mensaje, simplemente puede usar :q!(salir sin guardar). Si ya ha guardado (o está modificando una confirmación anterior), simplemente elimine todo el mensaje de registro y vuelva a guardar. Esto se puede hacer con ggdG+ :wqen Vim.

  • Haga que el editor salga con un código de salida distinto de cero. En Vim, puede usar :cq(salir con un código de error).

Vale la pena señalar que siempre puede restablecer su copia de trabajo al estado en que estaba antes de la confirmación git reset HEAD^.

Eugene Yarmash
fuente
96
: cq es el negocio. Por alguna razón, git continúa, independientemente de si uso: q!
Sirex
2
git reset HEAD ^ descartaría modificaciones locales
juanmf
2
: q! probablemente no funciona porque ya hay un mensaje predefinido, solo lo está editando.
Papipo
Hipo: Si git reset HEAD^pide más, su shell puede interpretar ^ como continuación de línea. Intente git reset "HEAD^", git reset HEAD^^o en su git reset HEAD~1lugar, según esta respuesta: stackoverflow.com/questions/14203952/git-reset-asks-more
Jake Stevens-Haas
76
  • :q!no funciona cuando se modifica una confirmación. No actualiza el mensaje de confirmación, pero ejecuta la enmienda :-(
  • :cq aborta completamente la enmienda.
Daniel Pinyol
fuente
1
Desearía poder agregar otro +1. He estado aquí muchas veces cuando mi enmienda recoge la confirmación incorrecta.
Wyrmwood
8

Para resumir:

  • Al crear una nueva confirmación (es decir git commit), deje de usar :q!.
  • Al enmendar (es decir git commit --amend), elimine el mensaje de confirmación (solo las primeras filas que no comienzan con un #), por ejemplo, manteniendo presionado vy usando las teclas de flecha para seleccionarlo y luego presionando Eliminar. ¡Salga con :wqpara aplicar los cambios ! Si usa :q!los cambios, se perderán y se usará el mensaje de confirmación anterior.

Cuando se utiliza VIM, está bien dejarlo en ambos casos :cq: VIM se cerrará con un código de error y se anulará la confirmación.

Maciej Piekarski
fuente