web-dev-qa-db-fra.com

Comment désengager mon dernier commit dans Git

Comment puis-je dégager mon dernier commit dans git?

Est-ce

git reset --hard HEAD

ou

git reset --hard HEAD^

?

783
richard

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).

1243
Cascabel

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"
281
Alex K

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 !!!

251
nfm

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^"
60
tgeros

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\^
25
dax

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.

19
Allen Kenney

Si vous vous engagez dans la mauvaise branche

Sur la mauvaise branche:

  1. git log -2 vous donne des hachages de 2 derniers commits, disons $prev et $last
  2. git checkout $prev checkout, validation correcte
  3. git checkout -b new-feature-branch crée une nouvelle branche pour la fonctionnalité
  4. git cherry-pick $last corrige une branche avec vos modifications

Ensuite, vous pouvez suivre l’une des méthodes suggérées ci-dessus pour supprimer votre commit de la première branche.

14
splendidthoughts

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

1
Filipe