Comment puis-je dégager mon dernier commit dans git?
Est-ce
git reset --hard HEAD
ou
git reset --hard HEAD^
?
Si vous n'êtes pas tout à fait sûr de ce que vous entendez par "uncommit" et si vous ne voulez pas utiliser git reset
, veuillez consulter " Revenir à une précédente validation Git ".
Si vous essayez de mieux comprendre git reset
mieux, veuillez vous reporter à " Pouvez-vous expliquer ce que" git reset "fait en anglais? ".
Si vous savez que vous voulez utiliser git reset
, cela dépend toujours de ce que vous entendez par "non engagé". Si tout ce que vous voulez faire, c'est annuler l'acte de commettre en laissant tout le reste intact, utilisez:
git reset --soft HEAD^
Si vous voulez annuler l'acte de commettre et tout ce que vous aviez mis en scène, mais laissez l'arborescence de travail (vos fichiers intacts):
git reset HEAD^
Et si vous voulez réellement complètement l'annuler, en jetant toutes les modifications non validées, en réinitialisant le dernier commit (comme la question initiale a été posée):
git reset --hard HEAD^
La question initiale posait également la question suivante: HEAD^
et non HEAD
. HEAD
fait référence au commit en cours - généralement à la pointe de la branche actuellement extraite. Le ^
est une notation qui peut être attachée à un spécificateur de validation quelconque et qui signifie "la validation avant". Donc, HEAD^
est la validation avant la précédente, tout comme master^
est la validation avant la pointe de la branche principale.
Voici la partie de la documentation de git-rev-parse décrivant toutes les façons de spécifier des commits (^
n'est qu'un élément de base parmi tant d'autres).
Pour conserver les modifications du commit que vous souhaitez annuler
git reset --soft HEAD^
Pour détruire les modifications du commit que vous souhaitez annuler
git reset --hard HEAD^
Vous pouvez également dire
git reset --soft HEAD~2
pour revenir en arrière 2 commits.
Edit: Comme indiqué par charsi, si vous utilisez Windows, vous devez mettre HEAD ou valider le hash entre guillemets.
git reset --soft "HEAD^"
git reset --soft "asdf"
git reset --soft HEAD^
Conserve les modifications modifiées dans votre arbre de travail.
git reset --hard HEAD^
JETERAIT LES CHANGEMENTS QUE VOUS AVEZ FAITS !!!
Attention, reset --hard
supprimera également vos modifications locales (non validées).
git reset --hard HEAD^
remarque: si vous êtes sur Windows, vous devrez citer le mot HEAD ^
git reset --hard "HEAD^"
Juste une note - si vous utilisez ZSH et voyez l'erreur
zsh: no matches found: HEAD^
Vous devez vous échapper du ^
git reset --soft HEAD\^
Si vous n'avez pas encore poussé vos modifications, utilisez git reset --soft [Hash for one commit]
pour revenir à un commit spécifique. --soft
indique à git de conserver les modifications annulées (c’est-à-dire, marquer les fichiers comme modifiés). --hard
indique à git de supprimer les modifications annulées.
Si vous vous engagez dans la mauvaise branche
Sur la mauvaise branche:
git log -2
vous donne des hachages de 2 derniers commits, disons $prev
et $last
git checkout $prev
checkout, validation correctegit checkout -b new-feature-branch
crée une nouvelle branche pour la fonctionnalitégit cherry-pick $last
corrige une branche avec vos modificationsEnsuite, vous pouvez suivre l’une des méthodes suggérées ci-dessus pour supprimer votre commit de la première branche.
Sois prudent avec ça.
Mais vous pouvez utiliser la commande rebase
git rebase -i HEAD~2
Un vi
va s'ouvrir et tout ce que vous avez à faire est de supprimer la ligne contenant le commit. Peut également lire les instructions qui ont été montrées dans l'édition appropriée @ vi
, plusieurs choses peuvent être effectuées sur ce mode