web-dev-qa-db-fra.com

Comment annuler un commit git local

Mon problème est que j'ai modifié un fichier, par exemple: README, ajouté une nouvelle ligne ' this pour ma ligne de test ' et enregistré le fichier, puis j'ai émis le commandes suivantes

 git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'

Je n'ai pas poussé le code dans github, maintenant je veux annuler ce commit.

Pour cela j'ai utilisé

   git reset --hard HEAD~1

Mais j'ai perdu la ligne nouvellement ajoutée ' this pour ma ligne de test ' du fichier README. Cela ne devrait pas arriver. J'ai besoin du contenu pour être là. Y a-t-il un moyen de conserver le contenu et d'annuler mon commit local?

651
Amal Kumar S

Il suffit d'utiliser git reset sans l'indicateur --hard:

git reset HEAD~1

PS: Sur les systèmes Unix, vous pouvez utiliser HEAD^ qui est égal à HEAD~1. Sous Windows, HEAD^ ne fonctionnera pas car ^ signale la continuation de la ligne. Votre invite de commande vous demandera donc simplement More?.

1249
Koraktor

Utilisez --soft au lieu de --hard flag:

git reset --soft HEAD^
164
TpED

Si vous êtes en cours de commit (c'est-à-dire déjà dans votre éditeur), vous pouvez l'annuler en supprimant toutes les lignes situées au-dessus du premier #. Cela annulera le commit.

Vous pouvez donc supprimer toutes les lignes pour que le message de validation soit vide, puis enregistrez le fichier:

It should look like this.

Vous recevrez alors un message disant Aborting commit due to empty commit message..

EDIT:

Vous pouvez également supprimer toutes les lignes et le résultat sera exactement le même.

Pour supprimer toutes les lignes de vim (si c'est votre éditeur par défaut), une fois que vous y êtes, tapez gg pour aller à la première ligne, puis dG pour supprimer toutes les lignes. Enfin, écrivez et quittez le fichier avec wq et votre commit sera annulé.

28
inostia

La première chose à faire est de déterminer si vous souhaitez conserver les modifications locales avant de supprimer le message de validation.

Utilisez git log pour afficher les messages de validation actuels, puis recherchez le commit_id avant la validation que vous avez vouloir supprimer, pas le commit que vous souhaitez supprimer.

Si vous souhaitez conserver les fichiers modifiés localement et supprimer simplement le message de validation:

git reset --soft commit_id

Si vous souhaitez supprimer tous les fichiers modifiés localement et le message de validation:

git reset --hard commit_id

C'est la différence entre soft et hard

13
mistdon

Vous pouvez dire à Git quoi faire avec votre index (ensemble de fichiers qui deviendra le prochain commit) et votre répertoire de travail lors de la réinitialisation de git en utilisant l'un des paramètres suivants:

--soft: Seules les validations seront réinitialisées, tandis que Index et le répertoire de travail ne sont pas modifiés.

--mixed: Ceci réinitialisera l'index pour qu'il corresponde à HEAD, sans toucher au répertoire de travail. Toutes les modifications resteront dans le répertoire de travail et apparaîtront modifiées.

--hard: Il réinitialise tout (commits, index, répertoire de travail) pour qu'il corresponde à HEAD.

Dans votre cas, j'utiliserais git reset --soft pour conserver vos modifications modifiées dans Index et répertoire de travail. Assurez-vous de vérifier cette sortie pour une explication plus détaillée.

8
Nesha Zoric

Utilisez la commande ci-dessous: $ git reset HEAD ~ 1 Après cela, vous pouvez également afficher les fichiers dont la réponse est semblable à la réponse ci-dessous.

Modifications en attente après réinitialisation: M application/config/config.php M application/config/database.php

1
Omkar