Comment supprimez-vous un commit dans Mercurial?

Je veux supprimer complètement un commit Mercurial comme s’il n’était jamais entré dans le référentiel et revenir à mon engagement précédent.

Est-ce possible?

    Si c’était votre dernier commit et que vous ne l’avez pas poussé nulle part, vous pouvez le faire avec la 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 ancienne révision et fusionner les modifications que vous souhaitez conserver. C’est aussi vrai, à moins que vous ne l’ayez poussé vers un repo que vous ne contrôlez pas. Une fois que vous appuyez sur, vos données sont très difficiles à récupérer.

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

    • Pour cela, vous devez aller à Fichier-> Paramètres-> Extensions.
    • Il vérifie mq et redémarre gui.
    • Après cela, faites un clic droit sur un commit inutile et ModifyHistory-> Ssortingp

    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 commits vers le référentiel public, vous possédez le référentiel public et / ou vous pouvez prendre en compte tous les clones disponibles. 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 publiques (voir les phases ) qui a déjà été poussé – vous pouvez le forcer à être un draft en faisant:

     hg phase -f -d 45:c3a3a271d11c 

    Je le rencontre assez souvent. Je fais un commit puis tire pour pousser. Mais alors, il y a quelque chose qui fait que mon nouvel engagement est inutile. Un simple hg rollback n’est pas suffisant car il ne fait que défaire le tir …

    C’est la chose à faire:

     hg ssortingp  

    Les choses sont indolores quand vous ne poussez pas vos changes n’importe où.

    Vous pouvez utiliser “backout hg” pour effectuer une fusion inverse. Toutes les options sont discutées dans le livre disponible gratuitement “Mercurial: The Definitive Guide”:

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

    S’il y a plus d’un commit et / ou si 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 ceci:
    Mercurial: réparer une histoire bouchée

    Si vous ne vous engagez que localement et ne poussez pas, vous pouvez simplement créer un clone localement (comme décrit dans mon lien) et vous avez terminé.

    Si vous avez déjà accédé à 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.

    Si vous utilisez la tortue, vous pouvez utiliser modifier l’historique> bande …

    Oui. A moins que je ne me trompe, à partir de la v2.3 (version 2012/08/01), vous pouvez utiliser HisteditExtension avec une commande drop pour supprimer un commit, avec ssortingp ou backout pour supprimer les modifications.

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