web-dev-qa-db-fra.com

Mercurial: annule un "hg commit --amend".

J'ai accidentellement fait un "hg commit --amend" au lieu d'un simple commit. Comment puis-je annuler le commit avant l'amendement?

23
Don P

Vous pouvez utiliser hg reflog (à partir de journal extension ) et hg reset <hash>.

hg reflog -v

devrait donner quelque chose comme:

<old-hash> -> <new-hash> <user> <timestamp>  commit --amend <some-path>

si tel est le amendement que vous souhaitez annuler, utilisez simplement:

hg reset <old-hash>

La validation sera rétablie comme auparavant et les modifications qui ont été modifiées doivent désormais être des modifications non validées (vérifiez en utilisant hg status et hg diff).

51
Sorina Sandu
  1. Trouver la dernière sauvegarde sauvegardée dans le répertoire .hg/strip-backup
  2. hg unbundle .hg/strip-backup/<latest backup>
  3. Vous devriez maintenant avoir deux têtes - une avec le commit modifié, une autre avec deux commits (le premier - ancien commit avant de modifier, le second caled: "modification temporaire du commit pour (ancien commit hachage)". 
  4. si vous avez l’extension histedit, vous pouvez utiliser hg histedit pour la changer (par exemple, sélectionnez edit afin d’obtenir un état juste avant la validation, c’est-à-dire quand vous pourrez voir toutes les modifications avec hg diff). 

N'oubliez pas de dépouiller la vieille tête.

4
mariu52

Si votre version de Mercurial est suffisamment nouvelle, vous devriez pouvoir utiliser la commande hg unamend à partir de l'extension uncommit fournie avec Mercurial. Cela peut nécessiter que les marqueurs d'obsolescence soient activés, je ne suis pas sûr.

  1. Activez l'extension uncommit, ajoutez ceci à votre ~/.hgrc:

    [extensions]
    uncommit =
    
  2. Exécute en fait l'unamend:

    hg unamend
    
0
spectral