L'abandon de modifications sans la suppression de l'histoire
Il y a une révision qui n'a pas fonctionné, donc j'ai envie d'abandonner sans le supprimer de l'histoire.
J'ai mis à jour à partir d'une version antérieure et engagée, créant ainsi une nouvelle tête.
Je n'ai pas de branches, je ne veux pas les branches, je veux juste tout simplement aller avec le nouveau de la tête exactement comme il est, rien de compliqué, pas de fusion, pas de soucis, il suffit d'aller sur l'oubli de la précédente.
Je n'arrive pas à trouver comment faire, et je commence à croire qu'il ne peut pas être fait. Tout ce que je trouve est que des trucs sur les branches, ou des trucs au sujet de la fusion.
- C'est dans votre pension, de sorte qu'il n'a pas été effacé de l'histoire. Vous avez créé une nouvelle tête, de sorte que vous pouvez aller sur les révisions sans erreur. Qu'est-ce que vous empêchant de se passer avec la nouvelle tête?
- Qu'est-ce que votre aversion pour les branches?
- Ce n'est pas exactement de l'aversion pour les branches. J'ai juste besoin de travailler sans un stupide étape supplémentaire d'en créer un juste pour le fermer.
- N'importe qui lisant - veuillez noter qu'une branche a déjà été créé dans ce scénario; note de l'explication donnée dans cette réponse:stackoverflow.com/a/3692607/3195477
Vous devez vous connecter pour publier un commentaire.
Mise à jour de votre référentiel à la tête avec la révision que vous voulez oublier, puis utilisez le
--close-branch
option pourhg commit
de marque (anonyme) de la branche fermée. Puis mise à jour à la tête de la branche que vous ne voulez, et continuer à travailler.Vous pouvez toujours voir la branche fermé si vous utilisez le
-c
option pourhg heads
, mais il ne sera pas affiché par défaut ethg merge
savent pas essayer de fusionner avec la fermeture de la tête.Vous aurez besoin d'utiliser
hg push --force
la première fois que vous appuyez sur cette fermées à la tête d'un autre référentiel, puisque vous êtes réellement créer de nouvelles têtes dans le dépôt distant lorsque vous appuyez sur. Alors, dites-Mercurial que ce est correct avec--force
. Les gens qui tirent la fermeture de la tête ne sera pas dérangé par tous les avertissements.hg heads
... je suis en utilisant mercurial 1.4.3, est une toute nouvelle fonctionnalité?hg branches
devrait encore afficher le nom de la direction générale, vous êtes sur. Plutôt que d'essayer de fermer la succursale, de fusionner votre anonyme branche en branche, en écartant tous les changements.Je sais que vous n'avez pas voulez de travailler avec des branches à ce stade, mais c'est exactement ce que vous avez fait. Lorsque vous êtes allé retour à une version antérieure et commis quelque chose qui a travaillé vous avez créé une branche - une nouvelle branche, mais une branche tout de même.
Il n'y a pas de problème avec juste comptable sur la juste comme vous êtes et ne pas se soucier d'avoir plusieurs têtes, mais si vous voulez les choses en ordre afin de ne pas accidentellement choisir le mauvais de la tête un moment, puis vous pouvez tuer la vieille branche.
Il y a un bon article dans l'Mercurial documentation qui vous emmène à travers un certain nombre d'options autour de L'Élagage Des Branches Mortes.
Je pense que la meilleure option pour vous est de marque la vieille branche "fermée". Si votre ancien chef de révision est "123", puis:
-C
danshg update
? Il semblerait qu'aucun des fichiers ont été modifiés, de sorte qu'il devrait fonctionner sans elle.Tout d'abord, type:
Imaginez, vous avez trois chefs répertoriés:
Disons, vous voulez garder la dernière tête active (223) et fermez le reste.
Vous puis procédez comme suit:
Près de la tête #59
Près de la tête #123
Valider les modifications
N'oubliez pas de passer à la droite de la tête à la fin de
Et vous avez terminé.
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
.hg up -r 223
avant de faire des changements.hg push --force
, pas seulementhg push
à obtenir au-delà de l'avertissement de pousser à têtes multiples.--force
directive est vraiment le dernier recours, vous devriez penser.hg push
par lui-même n'a pas de travail pour moi. Comment voulez-vous recommander de monter des modifications à un externe repo si elle refuse en raison de plusieurs têtes?Vous souhaitez utiliser
hg backout
. Cela supprime les modifications apportées par la révision de tout enfant de révision.Vérifier cela pour une bonne explication.
Mercurial Sauvegarde
hg revert --all --rev GOODREV
) sont de bons d'options.Vous pouvez cloner votre corrompu pensions de titres à une autre sans le clonage indésirables de la tête. Puis enlever l'ancien référentiel, déplacer nouvellement créé clone de l'original de la place et de continuer à travailler avec elle. Cela va prendre un peu de temps, mais vous obtiendrez un bon nettoyage de dépôt, sans un signe d'indésirables de révision.
Les deux Niall et Nick les réponses de tout droit. Parce que je me retrouve à créer beaucoup de ballants chefs, j'ai fini par écrire un alias pour fermer les têtes plus facilement. En ajoutant ceci à votre
.hgrc
:(si vous avez déjà un
[alias]
section, vous pouvez ajouter à la place)Vous pouvez maintenant fermer la tête en une seule commande (et sans avoir à mettre à jour vers un autre ensemble de modifications manuellement) comme ceci:
Remarque: l'alias tire parti du fait que Mercurial alias peuvent être des commandes shell. Cela signifie qu'il ne fonctionnera probablement sur UNIX, pas sur Windows.
Une alternative à la fermeture ou en éliminant les indésirables de la branche serait de de fusion de manière totalement les rejets de ses effets, mais le laisse dans l'histoire. Cette approche permettra à ces modifications indésirables à se propager dans un push - utilisez donc seulement ce qui est l'effet recherché.
Disons que la révision de l'histoire ressemble à ceci:
et il est
5
et6
qui n'en voulait plus.Vous pouvez faire ceci:
qui permettra de créer ceci:
La mise à jour de
8
vous assure de travailler sur l'obtention de la tête dans l'histoire, que vous souhaitez conserver.La
-t :local
charge hg à l'utilisation de la fusion "outil" appelé local qui lui dit d'ignorer les changements de l'autre branche, c'est à dire, celle qui n'est PAS représenté par le dossier de travail en cours de l'état. Plus d'infos.Ainsi, les changements non désirés dans
5
et6
sont conservés dans l'histoire, mais n'affectent pas quelque chose de plus récent.C'est un cas d'utilisation pour la Évoluer extension. Il n'est actuellement pas livré avec Mercurial, il est techniquement un tiers de l'extension. Mais il est utilisé assez fortement par un tas de gens, y compris Mercurial développeurs, est très développées, et ne va pas n'importe où.
Avec le Évoluer extension, il vous suffit de faire
et obtenir avec votre vie. La cset sera toujours là, mais obsolète. Il ne sera pas visible à moins que vous passiez la
--hidden
option Mercurial commandes, et par défaut de ne pas être poussé à des dépôts distants. Mais je pense que vous pouvez le forcer si vous le voulez vraiment.Si la cset vous êtes à la taille ancêtres vous voulez les garder, alors vous devrez exécuter
hg evolve
de rebase ces révisions.hg evolve
le fera automatiquement. Sinon, vous n'avez pas à faire quoi que ce soit.J'ai couru dans cette question de nombreuses fois quand j'ai envie de décapiter une tête qui a été créé dans l'erreur. J'ai toujours envie de le voir disparaître de la face de la Terre.
Sur votre copie locale, obtenir la plus récente et ensuite:
Trouver le début d'une tête, vous voulez bande (où un nouveau cou commence à bifurquer), obtenir le numéro de révision
Bande.
Source: TipsAndTricks.
Source: PruningDeadBranches#Using_strip.
Votre repo devriez maintenant avoir la tête dépouillé. La dernière étape est importante car le décapage de ne pas créer les changements que vous pouvez pousser votre référentiel central. Sans la dernière étape, vous n'avez dépouillé la tête localement.