2010-03-24 8 views
51

Je commence juste avec Mercurial, et j'ai rencontré quelque chose que je ne comprends pas.Différence entre Revert et Update dans Mercurial

J'ai apporté des modifications à plusieurs fichiers, et maintenant je veux annuler toutes les modifications que j'ai apportées à l'un d'entre eux (c'est-à-dire revenir à mon dernier commit pour un fichier spécifique). Pour autant que je puisse voir, la commande que je veux est revert.

Dans la page I lié à, il y a la déclaration suivante:

Cette opération ne change cependant pas la révision mère du répertoire de travail (ou révisions dans le cas d'une fusion non validée). Pour annuler une fusion non comptabilisée , vous pouvez utiliser "hg update -C -r." ce qui réinitialisera les parents au premier parent.

Je ne comprends pas la différence entre les deux (hg revert contre hg update -C -r). Quelqu'un peut-il m'éclairer sur la différence? Et dans mon cas, est-ce que je veux vraiment que l'inversion ou la mise à jour soit supprimée des modifications que j'ai apportées au fichier?

+0

Pour vraiment voir la différence, vous devriez essayer avec 'revert -r', puis utiliser le statut hg, vous verrez la différence :) – tonfa

Répondre

63

La première différence est de revenir peut travailler sur un sous-ensemble de la copie de travail tandis que la mise à jour fonctionne sur l'ensemble de la copie de travail. l'autre différence est dans ce qui se passe quand vous voulez revenir à une version autre que la dernière.

si nous avons des révisions (plafonds se sont engagés, minuscules sont des changements dans la copie de travail, révision mère est C)

A-B-C-d 

update -C -r B vous donnera

A-B-C 

avec votre jeu de copies de travail à B, tout changement entraînera la dérivation de B (révision parente définie sur B)

A-B-C 
    \e 

revert -r B vous donnera

A-B-C-b' 

où b « est un ensemble de changements qui annule tout dans les changements intermédiaires engagés, dans ce cas, il annule tous C. tout changement maintenant juste se joindre à la b » set (révision parent laissé inchangé à C)

+6

Votre explication de comment revenir/mise à jour à une révision autre que le dernier est excellent. Permettez-moi juste d'ajouter que la phrase dans l'aide qui a mentionné cette distinction est "ne change pas la révision parente du répertoire de travail". Dans les exemples de jk, la "révision parente du répertoire de travail" commence par C. Avec la mise à jour, elle finit par B, et avec la restauration, c'est toujours C ("ne change pas"). Dans les deux cas, il peut être consulté avec "hg parents". En outre, le "Revert peut travailler sur un sous-ensemble de la copie de travail" vient de ceci - le seul parent de dir de travail, et tous les fichiers le partagent –

+0

bon point, ajouté ce que la révision parent est à chaque point –

+0

Cool, bonne réponse à une question souvent posée –

Questions connexes