145 votes

git : abandon du commit au milieu de la saisie du message

Je suis au milieu d'un commit. J'ai tapé mon message de validation dans vim. Je me souviens maintenant que j'avais besoin de changer quelque chose. Je me rends compte qu'il y a d'autres options pour accomplir ce que je veux, mais je veux savoir s'il y a un moyen d'abandonner la livraison tout en sauvegardant le message de livraison que j'ai tapé jusqu'à présent.

211voto

nimrodm Points 9191

Si votre éditeur peut sortir avec un code d'erreur -- Git abandonnera le commit. Lorsque vous utilisez VIM, tapez

:cq

pour sortir avec un code d'erreur non nul et abandonner la livraison.

91voto

Borealid Points 35075

Oui. Écrivez le message de validation dans un fichier différent ( :w /some/other/path.txt ). Ensuite, quittez l'éditeur sans enregistrer ( :q! ). Si vous avez précédemment enregistré le fichier dans son chemin d'origine, supprimez tout et écrivez d'abord le fichier vide (un message de commit vide fera avorter le commit).

Maintenant, lorsque vous êtes prêt à vous engager "pour de vrai", utilisez le fichier de messages que vous avez enregistré sur le chemin alternatif.

Alternativement, copiez le message commit dans l'un des tampons de vim.

Il est bon de noter que vous vous n'avez pas besoin de faire ça du tout. : commit --amend vous permet de modifier le commit après qu'il ait été fait, donc la solution facile est de produire le commit avec ce que vous avez et de le corriger avant de le pousser. Vous pouvez même simplement terminer le commit dans son état brisé, reset HEAD~ (qui vous ramène à l'état dans lequel se trouvait votre copie de travail avant la validation), corrigez votre copie de travail, et ensuite commit -a -c HEAD@{1} pour utiliser l'ancien message de validation.

8 votes

Note : Quitter vim en utilisant ":q !" n'abandonnera pas la livraison s'il y a un message de conflit de fusion rempli automatiquement. Au lieu de cela, la livraison continuera et le message ne listera pas les fichiers ayant des conflits.

0 votes

write the empty file (an empty commit message will abort the commit) La partie a fonctionné comme un charme, merci !

68voto

zetta Points 61

Si vous avez ouvert vim pour écrire votre message de livraison, supprimez simplement les lignes qui ne commencent pas par # et git abandonnera votre livraison

Aborting commit due to empty commit message.

12 votes

Ceci est particulièrement utile lorsque vous voulez interrompre un commit git --amend.

1 votes

La question était de savoir comment interrompre la livraison tout en conservant le message de livraison. La suppression des lignes qui ne commencent pas par # supprime effectivement le message de validation, mais ne le sauvegarde pas. Je ne sais pas pourquoi cette question a autant de votes positifs.

2 votes

ggdG coupera tout le contenu du message, puis la prochaine fois que vous exécuterez vim vous pouvez juste P le texte que vous avez précédemment coupé.

9voto

bdonlan Points 90068

Bien que vous puissiez interrompre le commit, une autre approche consiste à modifier l'engagement après coup. Il suffit de valider votre travail actuel, puis d'apporter les modifications supplémentaires que vous souhaitez, git add puis exécutez git commit --amend . Vous serez replacé dans l'éditeur de message de validation, et lorsque vous sauvegarderez, la validation sera modifiée pour inclure les changements supplémentaires et votre nouveau message de validation.

7voto

Rudolf Tucek Points 184

Oui, c'est possible. Afin d'effectuer un commit, votre éditeur DOIT écrire le message de commit dans le fichier .git/COMMIT_EDITMSG et sortir avec un code d'état 0.

Donc si vous utilisez VI/VIM, vous pouvez faire ce qui suit...

  1. Rédigez votre message de validation.
  2. Sauvegarder le message de validation avec :w (par défaut, le contenu actuel sera sauvegardé dans le fichier .git/COMMIT_EDITMSG )
  3. Quitter l'éditeur avec une erreur :cq
  4. ...faites ce que vous avez à faire... même ajouter/supprimer des fichiers dans la zone de transit.
  5. Continuez à modifier votre message de livraison existant avec git commit -eF .git/COMMIT_MESSAGE

Le site -F /path/to/file remplira l'éditeur avec n'importe quel contenu donné de /path/to/file. Cependant, par défaut, cette opération exécutera instantanément la livraison, à moins que vous ne fournissiez l'option -e drapeau supplémentaire pour édition .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X