web-dev-qa-db-fra.com

Comment supprimer un commit dans Mercurial?

Je souhaite supprimer complètement un commit Mercurial comme s'il n'avait jamais été entré dans le référentiel et revenir à mon commit précédent.

Est-ce possible?

55
mdp

Si c'était votre dernier commit et que vous ne l'avez poussé nulle part, vous pouvez le faire avec rollback. Sinon, non. Pas vraiment. Il est temps de changer vos mots de passe.

Edit: Il a été souligné que vous pouvez cloner à partir d'une révision plus ancienne et fusionner les modifications que vous souhaitez conserver. C'est également vrai, sauf si vous l'avez poussé vers un référentiel que vous ne contrôlez pas. Une fois que vous aurez poussé, vos données seront très probablement très difficiles à récupérer.

33
nmichaels

Vous pouvez essayer de supprimer les informations mq sur votre commit.

  • Pour cela, vous devez aller dans Fichier-> Paramètres-> Extensions.
  • Là, vérifiez mq et redémarrez gui.
  • Après cela, faites un clic droit sur la validation inutile et ModifyHistory-> Strip
29
Stanislav

Pour modifier l'historique, j'utiliserais l'extension Histedit Extension .

 hg histedit 45:c3a3a271d11c

Cependant, gardez à l'esprit que cela n'a de sens que dans une situation où vous n'avez pas encore poussé les validations vers le référentiel public, vous êtes propriétaire du référentiel public et/ou vous pouvez rendre compte de tous les clones. Si vous recevez l'erreur suivante:

abort: can't rebase immutable changeset 43ab8134e7af

Cela signifie que Mecurial pense qu'il s'agit d'un ensemble de modifications public (voir phases ) qui a déjà été poussé - vous pouvez le forcer à être un draft à nouveau en faisant:

hg phase -f -d 45:c3a3a271d11c
10
Daniel Sokolowski

Je rencontre cela assez souvent. Je fais un commit et alors tire pour pousser. Mais alors il y a quelque chose qui fait que mon nouveau commit est inutile. Un simple hg rollback ne suffit pas car cela ne fait qu'annuler la traction ...

Voici la chose à faire:

hg strip <rev>

Les choses sont indolores lorsque vous ne poussez vos ensembles de modifications nulle part.

6
souser12345

S'il s'agit de plusieurs validations et/ou que vous l'avez déjà poussé ailleurs, vous pouvez cloner votre référentiel et spécifier le dernier ensemble de modifications à cloner.

Voir ma réponse ici comment faire cela:
Mercurial: Correction d'un historique borked

Si vous ne vous êtes engagé que localement et n'avez pas poussé, vous pouvez simplement créer un clone localement (comme décrit dans mon lien) et vous avez terminé.

Si vous avez déjà poussé vers un référentiel distant, vous devrez le remplacer par votre clone.
Bien sûr, cela dépend si vous êtes capable (ou autorisé) de le faire.

5
Christian Specht

Vous pouvez utiliser "hg backout" pour effectuer une fusion inversée. Toutes les options sont discutées dans le livre gratuit "Mercurial: The Definitive Guide":

http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

5
Jeremy Whitlock

Si vous utilisez la tortue, vous pouvez utiliser l'historique des modifications> bande ...

3
user1875812

Oui. Sauf erreur, à partir de la v2.3 (rel. 2012/08/01), vous pouvez utiliser HisteditExtension avec un drop pour supprimer une validation, avec strip ou backout pour supprimer les modifications.

Une simple recherche Google sur la fonctionnalité: https://www.google.com/webhp#q=histedit+drop

1
Jon Davis