Question

Mon problème est que j'ai changé un fichier par exemple: README, a ajouté une nouvelle ligne ' pour ma ligne d'essai et enregistré le fichier, j'émis les 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 pousser le code à github, Maintenant, je veux annuler cette commit.

Pour cela je

   git reset --hard HEAD~1

Mais j'ai perdu la ligne nouvellement ajoutée ' pour ma ligne d'essai à partir du fichier README. Cela ne devrait pas se produire. J'ai besoin du contenu d'être là. Est-il possible de conserver le contenu et annuler mon engagement local?

Était-ce utile?

La solution

Il suffit d'utiliser git reset sans le drapeau --hard:

git reset HEAD~1

PS: Les systèmes basés sur Unix, vous pouvez utiliser HEAD^ qui est égale à HEAD~1. Sous Windows HEAD^ ne fonctionnera pas parce que ^ signale une continuation de ligne. Ainsi, votre invite de commande vous demander More?.

Autres conseils

Utiliser --soft au lieu de --hard drapeau:

git reset --soft HEAD^

Si vous êtes au milieu d'un commettras (à savoir dans votre éditeur déjà), vous pouvez l'annuler en supprimant toutes les lignes au-dessus du premier #. Cela annulerait la validation.

Vous pouvez supprimer toutes les lignes afin que le message est vide commettras, puis enregistrez le fichier:

 Il devrait ressembler à ceci.

Vous recevrez alors un message qui dit Aborting commit due to empty commit message..

EDIT :

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

Pour supprimer toutes les lignes vim (si tel est votre éditeur par défaut), une fois que vous êtes dans l'éditeur, le type gg pour aller à la première ligne, dG puis supprimer toutes les lignes. Enfin, l'écriture et quittez le fichier avec wq et votre livraison sera annulée.

La première chose que vous devez faire est de déterminer si vous souhaitez conserver les changements locaux avant de supprimer le message de validation.

Utilisez git log pour afficher commit courant des messages, puis trouver le commit_id avant commettras que vous souhaitez supprimer, pas la commettras que vous souhaitez supprimer.

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

git reset --soft commit_id

Si vous voulez supprimer tous les fichiers modifiés localement et le message de commit:

git reset --hard commit_id

C'est la différence de douce et dur

Vous pouvez dire Git quoi faire avec votre index (ensemble de fichiers qui deviendra le commettras suivant) et le répertoire de travail lors de l'exécution reset git en utilisant l'un des paramètres:

--soft. Commits Seuls seront réinitialisées, tandis que l'indice et le répertoire de travail ne sont pas modifiés

--mixed: Ceci permet de réinitialiser l'index pour correspondre à la tête, tandis que le répertoire de travail ne sera pas touché. Tous les changements resteront dans le répertoire de travail et apparaissent modifiée.

--hard. Il remet tout (commits, index, répertoire de travail) pour correspondre à la HEAD

Dans votre cas, j'utiliser git reset --soft pour conserver vos modifications modifiés dans l'indice et le répertoire de travail. Assurez-vous de vérifier ceci pour une explication plus détaillée.

Utilisation ci-dessous commande: $ Git reset HEAD ~ 1 Après cela, vous aussi pouvez visualiser les fichiers qui reviennent en arrière comme ci-dessous la réponse.

Unstaged change après la réinitialisation: M application / config / config.php M application / config / database.php

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top