2014-06-19 2 views
5

J'essaie de rétablir un certain nombre de 'hash' dans git, en utilisant la commande 'revert'.git revert <hash> non autorisé en raison d'une fusion, mais aucune option -m n'a été donnée

J'utilise la commande suivante:

git revert c14609d74eec3ccebafc73fa875ec58445471765 

Mais, je reçois le texte suivant retourné:

error: Commit c14609d74eec3ccebafc73fa875ec58445471765 is a merge but no -m option was given.
fatal: revert failed

En tant que nouvel utilisateur git, s'il vous plaît pouvez-vous expliquer ce qui se passe & ce que je doit faire pour résoudre cela. Je veux revenir à cette certaine validation (c14609d74eec3ccebafc73fa875ec58445471765) que je vois lors de l'exécution git log.

+0

duplication possible de [Annuler une fusion Git?] (Http://stackoverflow.com/questions/2389361/undo-a-git-merge) –

Répondre

13

Vous essayez de rétablir une validation de fusion, et git ne sait pas vers quel parent revenir. Le -m nous permet de choisir quel parent choisir. Voyez le commit de fusion et notez le parent vers lequel vous voulez aller. L'information des parents peut être vu dans git log, par exemple:

commit d02ee0f2179def10277f30c71c5d6f59ded3c595

Merge: dd3a24c 2462a52

et exécutez:

git revert <hash> -m 1 

1 indique le nombre de parents 1.

Si vous essayez de revenir - que valider, faire:

git reset --hard <hash> 

Comprendre la différence entre git revert et git reset à partir des documents et décider lequel vous voulez. git revert est l'option la plus sûre, mais ne fait pas vraiment ce que vous voulez. Il ne fait que rétablir les changements d'un (ensemble de) commit. git reset vous amène à un commit particulier dans l'histoire, et réécrira votre historique.

+1

manojlds, quelle était la commande 'git log' complète que vous avez exécutée voir le parent? –

2

I want to revert back to ...

Ensuite, vous ne voulez pas git revert, au moins pas comme ça. git revert est pour annuler les modifications spécifiques apportées dans ce commit. Ce que vous cherchez est de rétablir ou d'annuler toutes les modifications effectuées après qui commettent.

git reset est la commande à utiliser ici.

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765 réinitialise complètement votre branche, index et arborescence de travail à cette validation spécifique.

Notez que les précautions d'usage s'appliquent: si quelqu'un d'autre a déjà récupéré des validations, les supprimer de l'historique complique les choses pour eux. Si vous voulez au lieu de créer un nouveau commit, qui rétablit simplement l'état à celui de commettre c14609d74eec3ccebafc73fa875ec58445471765, vous pouvez utiliser git rm et git checkout:

git rm -r . 
git checkout c14609d74eec3ccebafc73fa875ec58445471765 . 

(Le rm est nécessaire pour assurer que les nouveaux fichiers ajoutés supprimeront également. Cela vous permet ensuite de créer une nouvelle validation, en plus de votre historique local, qui annule tous les changements depuis le c14609d74eec3ccebafc73fa875ec58445471765.

Questions connexes