Disons que l'autre type a créé bar par-dessus foo, mais que vous avez créé baz entre-temps et que vous avez ensuite fusionné, ce qui donne un historique de
$ git lola
\* 2582152 (HEAD, master) Merge branch 'otherguy'
|\\
| \* c7256de (otherguy) bar
\* | b7e7176 baz
|/
\* 9968f79 foo
Note : git lola est un alias non standard mais utile.
Aucun résultat avec git revert
:
$ git revert HEAD
fatal: Commit 2582152... is a merge but no -m option was given.
Charles Bailey a donné une excellente réponse comme d'habitude. Utilisation de git revert
dans le cas de
$ git revert --no-edit -m 1 HEAD
\[master e900aad\] Revert "Merge branch 'otherguy'"
0 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 bar
supprime effectivement bar
et produit une histoire de
$ git lola
\* e900aad (HEAD, master) Revert "Merge branch 'otherguy'"
\* 2582152 Merge branch 'otherguy'
|\\
| \* c7256de (otherguy) bar
\* | b7e7176 baz
|/
\* 9968f79 foo
Mais je soupçonne que vous voulez jeter le commit de fusion :
$ git reset --hard HEAD^
HEAD is now at b7e7176 baz
$ git lola
\* b7e7176 (HEAD, master) baz
| \* c7256de (otherguy) bar
|/
\* 9968f79 foo
Comme l'indique le document 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 commit. ^<n>
signifie que n -e parent ( c'est-à-dire <rev>^
est équivalent à <rev>^1
). C'est une règle particulière, <rev>^0
signifie l'engagement lui-même et est utilisé lorsque <rev>
est le nom d'un objet balise qui fait référence à un objet commit.
donc avant d'invoquer git reset
, HEAD^
(ou HEAD^1
) était b7e7176 et HEAD^2
était c7256de, c'est-à-dire respectivement le premier et le second parent du commit de fusion.
Soyez prudent avec git reset --hard
parce que ça peut détruire le travail.