Comment annuler une git locale commettre
-
27-10-2019 - |
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?
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:
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