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
.
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
où 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.
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.