Como interrompo uma confirmação do Git quando o VI está na tela aguardando uma mensagem de confirmação?

203

Pedi ao Git para executar um commit a partir do git bash. Ele trouxe o VI como sempre.

Agora desejo cancelar o commit, como evito continuar com o commit a partir deste ponto?

Ben Aston
fonte
Vale acrescentar que você precisa pressionar Esc antes de entrar :q!para sair do vim.
M_Merciless 24/06

Respostas:

332

Você tem duas opções:

  • Forneça uma mensagem de confirmação vazia. Se for um novo commit e você ainda não salvou a mensagem, você pode simplesmente usá-lo :q!(sair sem salvar). Se você já salvou (ou está alterando uma confirmação anterior), basta excluir a mensagem de log inteira e salvar novamente. Isso pode ser feito com ggdG+ :wqno Vim.

  • Faça o editor sair com um código de saída diferente de zero. No Vim, você pode usar :cq(saia com um código de erro).

É importante notar que você sempre pode redefinir sua cópia de trabalho para o estado em que estava antes da confirmação git reset HEAD^.

Eugene Yarmash
fonte
96
: cq é o negócio. Por alguma razão, o git continua, independentemente de eu usar: q!
Sirex
2
git reset HEAD ^ descartaria modificações locais
juanmf
2
: q! provavelmente não funciona porque já existe uma mensagem predefinida, você está apenas editando.
Papipo
Soluço: Se git reset HEAD^pedir mais, seu shell pode interpretar ^ como continuação de linha. Tente git reset "HEAD^", git reset HEAD^^ou em git reset HEAD~1vez disso, por esta resposta: stackoverflow.com/questions/14203952/git-reset-asks-more
Jake Stevens-Haas
76
  • :q!não funciona ao alterar uma confirmação. Ele não atualiza a mensagem de confirmação, mas executa a alteração :-(
  • :cq aborta completamente a alteração.
Daniel Pinyol
fonte
1
Eu gostaria de poder adicionar outro +1. Eu estive aqui várias vezes quando minha alteração pega o commit errado.
Wyrmwood
8

Resumindo:

  • Ao criar um novo commit (ie git commit), pare de usar :q!.
  • Ao alterar (ou seja git commit --amend), remova a mensagem de confirmação (apenas as primeiras linhas que não começam com um #), por exemplo, mantendo ve pressionando as teclas de seta para selecioná-la e pressionando Excluir. Saia com :wqpara aplicar as alterações ! Se você usar:q! as alterações serão perdidas e a mensagem de confirmação anterior será usada.

Ao usar o VIM, é aceitável sair dos dois casos :cq- o VIM será encerrado com um código de erro e a confirmação será cancelada.

Maciej Piekarski
fonte