Lorsque j'utilise git commit --amend
ou git rebase -i
, vim s'ouvre pour que j'apporte des modifications. Si je change d'avis et quitte vim sans faire de changements, un commit est toujours fait qui apparaît dans git reflog
.
Comment quitter l'éditeur sans rien engager?
Pour que git n'effectue aucune modification lorsque vous exécutez git commit --amend
ou git rebase -i
.
Supprimez simplement le message (et enregistrez). Tout ce que git fait est de rechercher un message non vide pour voir si une validation valide s'est produite. Puisqu'il y a un message de validation (parce que vous avez commis quelque chose auparavant), git pense que c'est une validation ou un rebase valide.
:cq!
Cela forcera une erreur sur Vim et n'enregistrera aucune modification. Lien vers le manuel Vim.
Vous pouvez utiliser cq
sans !
si vous voulez que vim
se termine avec une erreur et sans enregistrer.
Lorsque vous n'avez pas apporté de modifications et les avez enregistrées, :q!
pourrait suffire (dans un commit simple; lorsque vous ne modifiez pas), mais si vous êtes comme moi, il est probable que vous ayez déjà (même inconsciemment) persisté le message édité.
Git (et d'autres outils de ce type qui utilisent Vim pour modifier un message) abandonnera tout le processus (et ignorera toutes les modifications enregistrées dans le message) si l'éditeur quitte avec un état de sortie non réussi. Vous pouvez le faire dans Vim avec le :cq[uit]!
commande.
Vous pouvez utiliser cq
sans !
si vous voulez que vim
se termine avec une erreur et sans enregistrer.
l'application git exécute l'application éditeur, et si l'application éditeur retourne sans succès (code de sortie différent de zéro), l'application git le reconnaît et arrête le traitement.
dans vim, vous pouvez effectuer cela avec :cq!
du manuel vim:
:cq :cquit
:cq[uit][!] Quit Vim with an error code, so that the compiler
will not compile the same file again.
WARNING: All changes in files are lost! Also when the
[!] is not used. It works like ":qall!" :qall,
except that Vim returns a non-zero exit code.
cela fonctionne aussi pour svn! la différence AFAIK entre svn et git est que svn n'aime pas les messages de commit vides et s'arrête lorsque vous quittez avec :q!
(même si le code de sortie est 0) mais pour git c'est ok. pour les deux, ce n'est pas correct si l'éditeur donne un code de sortie différent de zéro.
les codes de sortie sont un concept très fondamental sous Unix/Linux et un moyen simple d'informer l'application appelante si tout allait bien (code de sortie 0) ou si quelque chose n'allait pas.