J'utilise Mercurial et je suis dans un terrible désordre localement, avec trois têtes. Je ne peux pas pousser, et je veux juste supprimer tous mes changements et commits locaux et recommencer avec un code totalement propre et un historique propre.
En d'autres termes, je veux me retrouver avec (a) exactement le même code localement que celui qui existe dans la pointe de la branche distante et (b) aucun historique des commits locaux.
Je sais hg update -C
écrase tous les changements locaux. Mais comment supprimer des commits locaux?
Pour être clair, je n'ai aucun intérêt à préserver le travail que j'ai effectué localement. Je veux juste le moyen le plus simple de revenir à une caisse locale totalement propre.
version-control
mercurial
dvcs
head
Richard
la source
la source
Réponses:
Lorsque le moyen le plus simple (un nouveau
hg clone
) n'est pas pratique, j'utilisehg strip
:Répétez jusqu'à ce que
hg outgoing
reste calme. Notez quehg strip $rev
oblitère$rev
et tous ses descendants.Notez que vous devrez peut-être d' abord activer
strip
dans vos paramètres Mercurial .PS: une approche encore plus intelligente consiste à utiliser le langage revset et à faire:
la source
hg strip 'roots(outgoing())'
pour se rendre au travail parce qu'il ne reconnaît pas'roots(outgoing())'
. J'ai pu le faire fonctionnerhg strip "roots(outgoing())"
.cmd.exe
, oui.Vous souhaiterez créer un clone local dans lequel vous ne conserverez que les ensembles de modifications qui sont également présents dans le référentiel distant. Utilisez TortoiseHg ,
hg log
ou similaire à la figure qui de vos révisions est que la révision lastest vous ne l' avez pas faire (celui avant le désordre a commencé). L'utilisationhg outgoing
peut vous aider ici - elle répertorie tous les ensembles de modifications que vous avez effectués - choisissez un numéro de révision antérieur à l'un d'entre eux.Si la révision cible est appelée
good
et votre clone est appeléfoo
, procédez comme suit:Ce sera une opération locale rapide - il n'y a aucune raison de tout télécharger à nouveau . Le
foo-clean
clone ne contiendra que des ensembles de modifications jusqu'à la révisiongood
. Vous pouvez maintenant remplacerfoo-clean/.hg/hgrc
parfoo/.hg/hgrc
afin de conserver les paramètres locaux de votre référentiel tels que le chemin push / pull par défaut.Lorsque vous êtes satisfait de
foo-clean
tout ce dont vous avez besoinfoo
, supprimezfoo
et renommez simplementfoo-clean
enfoo
. Faites ahg pull
pour obtenir tous les nouveaux ensembles de modifications du référentiel distant dans votre clone et continuez comme d'habitude.Si personne n'a poussé de nouveaux ensembles de modifications vers le référentiel distant, alors il est très simple de déterminer la révision que vous souhaitez utiliser comme
good
ci-dessus:hg id default
vous indiquera l'ID de la pointe dans le référentiel distant.la source
hg pull -r
pour la dernière «bonne» révision de chaque branche supplémentaire.D'accord. Supprimez donc simplement tous les éléments locaux,
hg init
le nouveau référentiel local ethg pull
la dernière astuce que vous avez. N'oubliez pashg update
après cela.la source
hg init
+hg pull
=hg clone
La différence est que celahg clone
fait un joli.hg/hgrc
fichier pour vous et quihg clone
utilisera des liens physiques pour économiser de l'espace lors du clonage sur le même système de fichiers.hg help init
est ici: selenic.com/mercurial/hg.1.html#init Mais c'est peut-être trop laconique? Veuillez envoyer un e-mail à notre liste de diffusion si vous avez besoin de plus d'aide! Voir: mercurial.selenic.com/wiki/MailingListsVous pouvez utiliser
pour tuer toute révision et son sous-arbre dans votre référentiel local.
https://www.mercurial-scm.org/wiki/Strip
Mais n'essayez pas de l'utiliser pour tout ce qui a déjà été poussé.
la source
Supprimez simplement tout ce que vous avez sur votre système local et re-clonez le dépôt distant.
la source
fait l'affaire pour moi.
Il supprime toutes les révisions qui ne sont pas transmises au référentiel par défaut qui sont créées avec votre nom d'auteur.
Vous pouvez également utiliser ce style pour qu'il ne vérifie pas avec le référentiel par défaut mais avec un autre référentiel
la source
Si vous utilisez TortoiseHg, un moyen simple de sortir d'un (petit) désordre est de commencer par mettre à jour la dernière révision, puis de sélectionner vos ensembles de modifications et de lancer "fusionner avec local". Lorsque la boîte de dialogue de fusion apparaît, cliquez simplement sur la petite icône «+» pour afficher des options supplémentaires, dont l'une est «rejeter les ensembles de modifications de la (autre) révision de la cible de fusion». Cela signifie que vos ensembles de modifications seront toujours dans le dépôt et seront poussés, mais n'auront aucun effet, car ils seront supprimés lors de la fusion. Si vous avez beaucoup d'ensembles de modifications couvrant plusieurs têtes, vous ne voudrez peut-être pas polluer le dépôt de cette manière, mais c'est une solution simple et il vaut la peine de considérer si les ensembles de modifications que vous supprimez contiennent des données que vous voudrez peut-être référencer plus tard.
la source