Question Mercurial: Changer de répertoire de travail en branche sans perdre les modifications?


Disons que j'ai une branche nommée 'B1' sur laquelle je développe des fonctionnalités. Je suis à un bon point d'arrêt avant une démo mais je n'ai pas fini avec la fonctionnalité, donc j'ai:

hg up default
hg merge B1
hg ci -m "merged in feature drop"
hg push

Maintenant, je continue à travailler pendant une demi-heure environ et je ne m'engage que pour me rendre compte que j'ai oublié de revenir à B1 et que mon répertoire de travail actuel est activé. default - Uhoh. En théorie, je devrais être en mesure de simplement marquer mon parent du répertoire de travail comme étant la pointe de B1 - existe-t-il un moyen facile de le faire?

Je pourrais bien sûr m'engager, mettre à jour en B1 et fusionner mes modifications, mais il y a un jeu de paramètres instable par défaut et cela m'arrive assez souvent pour une vraie solution.


22
2017-10-11 16:08


origine


Réponses:


Deux façons. Tout d'abord, la manière évidente:

hg diff > foo
hg up -C b1
hg import --no-commit foo
rm foo

Deuxièmement, la manière magique:

hg up -r 'ancestor(., b1)'  # take working dir back to the fork point
hg up b1                    # take it forward to the branch head

Cette façon implique des fusions. Selon le degré de divergence de vos branches, cela peut être indolore. Ou cela peut être compliqué, et vous risquez de gâcher vos modifications que vous n'avez enregistrées nulle part. C'est pourquoi même les magiciens comme moi préfèrent le faire en premier.


28
2017-10-11 17:29



Je voudrais utiliser l'extension de l'abri. Je pense qu'il est distribué avec TortoiseHg, vous pouvez également l'utiliser depuis l'interface utilisateur:

hg shelve --all
hg up B1
hg unshelve

8
2017-10-12 09:08



Généralement, pour ce type d'approche dynamique, je privilégie les files d'attente mercurielles.

Dans votre situation, ce que je ferais serait de créer un patch par défaut avec les modifications, d’enlever le patch, de basculer sur B1 et d’appliquer le patch.

Ça va quelque chose comme:

hg qnew OOPSPATCH
hg qrefresh 
hg qpop 
hg up B1 
hg qpush

<hack hack>

hg qrefresh 
hg qfinish

2
2017-10-11 16:20



Extension de base vous permet de changer de parent pour tout commit pour des modifications non validées.

Si vous voulez simplement changer de branche pour un futur engagement - MQ (comme mentionné) ou Shelve


2
2017-10-12 09:43