Come posso interrompere un commit Git quando VI è sullo schermo in attesa di un messaggio di commit?


203

Ho chiesto a Git di eseguire un commit all'interno di git bash, ha sollevato VI come sempre.

Ora desidero annullare il commit, come posso evitare di procedere con il commit da questo punto?


Vale la pena aggiungere che è necessario premere Esc prima di entrare :q!per uscire da VIM.
M_Merciless,

Risposte:


332

Hai due opzioni:

  • Fornire un messaggio di commit vuoto. Se si tratta di un nuovo commit e non hai ancora salvato il messaggio, puoi semplicemente utilizzare :q!(esci senza salvare). Se hai già salvato (o stai modificando un commit precedente), elimina l'intero messaggio di registro e salva di nuovo. Questo può essere fatto con ggdG+ :wqin Vim.

  • Avere l'editor uscire con un codice di uscita diverso da zero. In Vim, puoi usare :cq(esci con un codice di errore).

Vale la pena notare che è sempre possibile ripristinare la copia di lavoro allo stato in cui si trovava prima del commit con git reset HEAD^.


96
: cq è il business. Per qualche ragione git si arrabbia indipendentemente dal fatto che io usi: q!
Sirex,

2
git reset HEAD ^
eliminerebbe

2
: q! probabilmente non funziona perché esiste già un messaggio predefinito, lo stai solo modificando.
Papipo,

Singhiozzo: se git reset HEAD^chiede di più, la shell può interpretare ^ come continuazione della linea. Prova git reset "HEAD^", git reset HEAD^^o git reset HEAD~1invece per questa risposta: stackoverflow.com/questions/14203952/git-reset-asks-more
Jake Stevens-Haas

76
  • :q!non funziona quando si modifica un commit. Non aggiorna il messaggio di commit, ma esegue la modifica :-(
  • :cq interrompe completamente l'emendamento.

1
Vorrei poter aggiungere un altro +1. Sono stato qui per moltissime volte quando il mio emendamento prende l'impegno sbagliato.
Wyrmwood,

8

Per riassumere:

  • Quando si crea un nuovo commit (es. git commit), Chiudere usando :q!.
  • Quando si modifica (cioè git commit --amend) rimuovere il messaggio di commit (solo le prime poche righe che non iniziano con un #), ad esempio tenendo premuto v e usando i tasti freccia per selezionarlo e quindi premendo Elimina. Esci con :wqper applicare le modifiche ! Se si utilizzano :q!le modifiche andranno perse e verrà utilizzato il messaggio di commit precedente.

Quando si utilizza VIM, va bene in entrambi i casi uscire con :cq- VIM si chiuderà con un codice di errore e il commit verrà interrotto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.