web-dev-qa-db-fra.com

git revert <hash> n'est pas autorisé en raison d'une fusion mais aucune option -m n'a été donnée

J'essaie de revenir à un certain nombre de "hachage" dans git, en utilisant la commande "revert".

J'utilise la commande suivante:

git revert c14609d74eec3ccebafc73fa875ec58445471765

Mais, je reçois ce qui suit:

erreur: Commit c14609d74eec3ccebafc73fa875ec58445471765 est une fusion mais aucune option -m n'a été donnée.
fatal: échec de la restauration

En tant que nouvel utilisateur git, pouvez-vous expliquer ce qui se passe et ce que je dois faire pour résoudre ce problème.

Je veux revenir à ce commit (c14609d74eec3ccebafc73fa875ec58445471765) que je vois lors de l'exécution git log.

24
user3544484

Vous essayez de revenir à un commit de fusion et git ne sait pas à quel parent revenir. Le -m nous permet de choisir quel parent choisir. Voir le commit de fusion et notez à quel parent vous voulez aller. Les informations parentales peuvent être consultées dans git log, par exemple:

commit d02ee0f2179def10277f30c71c5d6f59ded3c595

Fusionner: dd3a24c 2462a52

et courir:

git revert <hash> -m 1

1 indique le numéro du parent 1.

Si vous essayez de revenir à ce commit, faites:

git reset --hard <hash>

Comprenez la différence entre git revert et git reset dans la documentation et choisissez celui que vous voulez. git revert est l'option la plus sûre, mais ne fait pas vraiment ce que vous voulez. Il annule simplement les modifications d'un (ensemble de) commit. git reset vous fait passer à un commit particulier de l'historique et réécrira votre historique.

34
manojlds

Je veux revenir à ...

Alors tu ne veux pas git revert, du moins pas comme ça. git revert sert à annuler les modifications spécifiques apportées à cette validation. Ce que vous cherchez, c'est d'annuler ou d'annuler toutes les modifications apportées après ce commit.

git reset est la commande à utiliser ici.

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765 réinitialise complètement votre branche, index et arbre de travail à ce commit spécifique.

Notez que les précautions habituelles s'appliquent: si quelqu'un d'autre a déjà récupéré des commits plus tard, les supprimer de l'historique comme cela complique les choses pour eux. Si vous souhaitez plutôt créer un nouveau commit, qui restaure simplement l'état à celui du commit c14609d74eec3ccebafc73fa875ec58445471765, vous pouvez utiliser git rm et git checkout:

git rm -r .
git checkout c14609d74eec3ccebafc73fa875ec58445471765 .

(Le rm est nécessaire pour vous assurer que les fichiers nouvellement ajoutés sont également supprimés.) Cela vous permet ensuite de créer un nouveau commit, en plus de votre historique local, qui annule chaque changement depuis c14609d74eec3ccebafc73fa875ec58445471765.

2
user743382