Disons que l'autre gars a créé un bar au-dessus de foo, mais que vous avez créé baz entre-temps et que vous avez fusionné, donnant un historique de
$ git lola
* 2582152 (HEAD, master) Fusionner la branche 'otherguy'
| \
| * barre c7256de (otherguy)
* | b7e7176 baz
| /
* 9968f79 foo
Remarque: git lola est un alias non standard mais utile.
Pas de dés avec git revert
:
$ git revert HEAD
fatal: Commit 2582152 ... est une fusion mais aucune option -m n'a été donnée.
Charles Bailey a donné une excellente réponse comme d'habitude. Utilisation git revert
comme dans
$ git revert --no-edit -m 1 HEAD
[master e900aad] Rétablir "Fusionner la branche 'otherguy'"
0 fichiers modifiés, 0 insertions (+), 0 suppressions (-)
mode suppression 100644 bar
supprime efficacement bar
et produit un historique de
$ git lola
* e900aad (HEAD, master) Revert "Fusionner la branche 'otherguy'"
* 2582152 Fusionner la branche 'otherguy'
| \
| * barre c7256de (otherguy)
* | b7e7176 baz
| /
* 9968f79 foo
Mais je soupçonne que vous voulez supprimer le commit de fusion:
$ git reset --hard HEAD ^
HEAD est maintenant chez b7e7176 baz
$ git lola
* b7e7176 (HEAD, maître) baz
| * barre c7256de (otherguy)
| /
* 9968f79 foo
Comme documenté dans le git rev-parse
manuel
<rev>^
, par exemple HEAD ^,v1.5.1^0
Un suffixe ^
à un paramètre de révision signifie le premier parent de cet objet de validation. ^<n>
signifie le n -ième parent ( c'est <rev>^
-à- dire équivaut à <rev>^1
). En règle spéciale, <rev>^0
signifie le commit lui-même et est utilisé quand <rev>
est le nom d'objet d'un objet tag qui fait référence à un objet commit.
donc avant d'invoquer git reset
, HEAD^
(ou HEAD^1
) était b7e7176 et HEAD^2
c7256de, c'est -à- dire respectivement les premier et deuxième parents du commit de fusion.
Soyez prudent git reset --hard
car cela peut détruire le travail.