Question

    

Cette question a déjà une réponse ici:

         

J'utilise actuellement TortoiseHg (Mercurial) et ai commis par inadvertance un message de validation incorrect. Comment puis-je modifier ce message de validation dans le référentiel?

Était-ce utile?

La solution

Mise à jour: Mercurial a ajouté - amender , ce qui devrait être l'option préférée. option maintenant .

Vous pouvez annuler le dernier commit (mais seulement le dernier) avec hg rollback , puis le réappliquer.

Important : cet élément supprime définitivement le dernier commit (ou tirez). Ainsi, si vous avez effectué une hg update , que la validation ne figure plus dans votre répertoire de travail, elle est définitivement perdue. Faites donc d'abord une copie.

En dehors de cela, vous ne pouvez pas modifier l'historique du référentiel (y compris les messages de validation), car tout ce qu'il contient est résumé. La seule chose à faire est d'élaguer l'historique après un ensemble de modifications, puis de le recréer en conséquence.

Tout cela ne fonctionnera pas si vous avez déjà publié vos modifications (à moins que vous ne puissiez obtenir toutes les copies) et que vous ne puissiez pas non plus "réécrire l'historique". incluant les commits signés par GPG (par d’autres personnes).

Autres conseils

Eh bien, je faisais comme ça:

Imaginez, vous avez 500 commits et votre message de validation erroné est dans la r.498.

hg qimport -r 498:tip
hg qpop -a
joe .hg/patches/498.diff
(change the comment, after the mercurial header)
hg qpush -a
hg qdelete -r qbase:qtip

Bonne nouvelle: hg 2.2 vient d'être ajouté git like - modifier option.

et dans tortoiseHg, vous pouvez utiliser "Modifier la révision actuelle". en sélectionnant une flèche noire à droite du bouton de validation

a

Je sais que ceci est un ancien post et vous avez marqué la question comme ayant reçu une réponse. Je recherchais la même chose récemment et j'ai trouvé l'extension histedit très utile. Le processus est expliqué ici:

http: //knowledgestockpile.blogspot. com / 2010/12 / Changing-commit-message-of-revision-in.html

La dernière opération était le commit en question

Pour modifier le message de validation de la dernière validation lorsque la dernière opération mercurial était une validation, vous pouvez utiliser

.
$ hg rollback

pour annuler le dernier commit et le re-commettre avec le nouveau message:

$ hg ci -m 'new message'

Attention, car la commande rollback annule également les opérations suivantes:

  
      
  • import      
        
    • tirez
    •   
    • push (avec ce référentiel comme destination)
    •   
    • dégrouper
    •   
  •   

(voir hg help rollback )

Ainsi, si vous n'êtes pas sûr si la dernière commande mercurial était un hg ci , n'utilisez pas hg rollback .

Modifier tout autre message de validation

Vous pouvez utiliser la extension mq , qui est distribué avec Mercurial, pour changer le message de validation de toute validation.

Cette approche n'est utile que lorsqu'il n'y a pas déjà de référentiels clonés dans le public contenant le jeu de modifications que vous souhaitez renommer, car cela modifie le hachage du jeu de modifications et tous les jeux de modifications suivants.

Cela signifie que vous devez être en mesure de supprimer tous les clones existants comprenant le jeu de modifications que vous souhaitez renommer, sinon vous ne pourrez pas les insérer / les extraire.

Pour utiliser l'extension mq, vous devez l'activer explicitement, par exemple. Sous UNIX, vérifiez votre ~ / .hgrc , qui doit contenir les lignes suivantes:

[extensions]
mq=

Dites que vous souhaitez modifier la révision X - le premier qimport importe les révisions X et suivantes. Maintenant, ils sont enregistrés en tant que pile de correctifs appliqués. En sautant ( qpop ) la pile complète sauf que X rend X disponible pour les modifications via qrefresh . Une fois le message de validation modifié, vous devez repousser tous les patchs ( qpop ) pour les réappliquer, c'est-à-dire pour recréer les révisions suivantes. La pile de correctifs n’est pas nécessaire, elle peut donc être supprimée via qfinish .

Le script de démonstration suivant montre toutes les opérations en cours. Dans l'exemple, le message de validation du troisième jeu de modifications est renommé.

# test.sh
set -x -e -u
echo INFO: Delete old stuff
rm -rf .hg `seq 5`
echo INFO: Setup repository with 5 revisions
hg init
echo '[ui]' > .hg/hgrc
echo 'username=Joe User <juser@example.org>' >> .hg/hgrc
echo 'style = compact' >> .hg/hgrc
for i in `seq 5`; do
  touch $i && hg add $i && hg ci -m "changeset message $i" $i
done
hg log 
echo INFO: Need to rename the commit message or the 3rd revision
echo INFO: Displays all patches
hg qseries
echo INFO: Import all revisions including the 3rd to the last one as patches
hg qimport -r 2:tip
hg qseries
echo INFO: Pop patches
hg qpop 2.diff
hg qseries
hg log 
hg parent
hg qrefresh -m 'CHANGED MESSAGE'
hg log 
echo INFO: Push all remaining patches
hg qpush -a
hg log 
hg qseries
echo INFO: Remove all patches
hg qfinish -a
hg qseries && hg log && hg parent

Copiez-le dans un répertoire vide et exécutez-le, par exemple. via:

$ bash test.sh 2>&1 | tee log

La sortie doit inclure le message de changement d'origine:

+ hg log
[..]
2   53bc13f21b04   2011-08-31 17:26 +0200   juser
  changeset message 3

Et l'opération de changement de nom du message modifié:

+ hg log
[..]
2   3ff8a832d057   2011-08-31 17:26 +0200   juser
  CHANGED MESSAGE

(Testé avec Mercurial 1.7.5)

Dans TortoiseHg, cliquez avec le bouton droit de la souris sur la révision à modifier. Choisissez Modifier l'historique - > Importer MQ. Cela convertira toutes les révisions jusqu'à la révision sélectionnée incluse dans les modifications Mercurial en correctifs Mercurial Queue. Sélectionnez le correctif pour lequel vous souhaitez modifier le message. L'écran deviendra automatiquement l'écran MQ Editor. Modifiez le message qui se trouve au milieu de l'écran, puis cliquez sur QReractualiser. Pour finir, cliquez avec le bouton droit sur le correctif et choisissez Modifier l’historique - > Terminer le correctif, ce qui le reconvertira en un jeu de modifications.

Oh, cela suppose que MQ est une extension active de TortoiseHG sur ce référentiel. Si ce n'est pas le cas, vous devriez pouvoir cliquer sur Fichier -> Paramètres, sur Extensions, puis sur la case à cocher mq. Il devrait vous avertir que vous devez fermer TortoiseHg avant que l'extension ne soit active, fermez-la et rouvrez-la.

Comme d'autres l'ont déjà mentionné, l'extension MQ est bien plus adaptée à cette tâche et vous ne courez pas le risque de détruire votre travail. Pour ce faire:

  1. Activez l'extension MQ en ajoutant quelque chose comme ceci à votre hgrc:
    [extensions]
    mq =
    
  2. Mettez à jour le jeu de modifications que vous souhaitez modifier, généralement un conseil:
    hg up <rev>
    
  3. Importez le jeu de modifications actuel dans la file d'attente:
    hg qimport -r .
    
  4. Actualisez le correctif et modifiez le message de validation:
    hg qrefresh -e
    
  5. Terminez tous les correctifs appliqués (un dans ce cas) et stockez-les en tant que changesets ordinaires:
    hg qfinish -a
    

Je ne connais pas TortoiseHg, mais les commandes devraient être similaires à celles ci-dessus. Je pense aussi que cela vaut la peine de mentionner que l'historique de l'édition est risqué; vous ne devriez le faire que si vous êtes absolument certain que le groupe de modifications n'a pas été poussé ni extrait de nulle part ailleurs.

La restauration en arrière est une solution très simple, mais elle ne peut aider que lors du dernier commit. Mercurial Queues est beaucoup plus puissant (notez que vous devez activer l'extension de files d'attente Mercurial pour pouvoir utiliser commandes "hg q *").

Je l'ai fait de cette façon. Premièrement, n'appuyez pas sur vos modifications ou vous n'avez pas de chance. Saisissez et installez l'extension collapse . Commettez un autre changeset factice. Utilisez ensuite collapse pour combiner les deux jeux de modifications précédents en un seul. Il vous demandera un nouveau message de validation en vous donnant les messages que vous avez déjà comme point de départ. Vous avez effectivement modifié votre message de validation d'origine.

Un hack que j'utilise si la révision que je veux éditer n'est pas si vieux:

Disons que vous êtes à la rév 500 et que vous souhaitez modifier 497.

hg export -o rev497 497
hg export -o rev498 498
hg export -o rev499 499
hg export -o rev500 500

Editez le fichier rev497 et changez le message. (C'est après les premières lignes précédées de "#")

hg import rev497
hg import rev498
hg import rev499
hg import rev500

Il existe une autre approche avec l'extension MQ et le commandes de débogage . C'est un moyen général de modifier l'historique sans perdre de données. Permettez-moi d’assumer la même situation que Antonio .

// set current tip to rev 497
hg debugsetparents 497
hg debugrebuildstate
// hg add/remove if needed
hg commit
hg strip [-n] 498

Un petit bijou dans la discussion ci-dessus - merci à @Codest et @Kevin Pullin. Dans TortoiseHg, une option de menu déroulant est adjacente au bouton de validation. Sélection " Modifier la révision actuelle " ramène le commentaire et la liste des fichiers. Tellement utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top