Ma question est la suivante:Comment fusionner pour se débarrasser de la tête avec la ligne de commande Mercurial, comme je peux le faire avec TortoiseHg?
- Si j'ai deux têtes (branches avec des changements) dans mon dépôt Mercurial, et je voudrais vous débarrasser de l'un d'eux, mais rejettent toutes les modifications de cette branche à la place de les fusionner dans l'autre, et je ne peux pas effacer ces changesets donc je dois fusionner, comment puis-je faire cela avec le client en ligne de commande?
Si j'ai deux têtes dans mon dépôt Mercurial, et utiliser TortoiseHg comme mon client, le dépôt pourrait ressembler à ceci:
Alors je peux me débarrasser de la test2
tête en faisant une fusion et de jeter. Je voudrais d'abord mettre à jour à la tête que je voudrais garder (test3
dans ce cas, qui dans l'image ci-dessus est déjà le parent actuel de mon dossier de travail). Alors je le clic droit et sélectionnez « Fusionner avec ... »:
et dans la boîte de dialogue qui apparaît, je choisirais d'annuler les modifications de la cible de fusion (la branche I ». souhaitez rejeter tous les changements de):
Après cette fusion a connu, tous les changements dans la tête test2
a été mis au rebut, et je peux commettre. La tête a maintenant disparu, mais le changeset fait toujours partie de l'histoire.
Ma question est la suivante: Comment puis-je faire la même chose en utilisant seulement le client en ligne de commande? Je ne peux pas trouver toutes les options correspondant à la commande hg merge
:
hg merge [-P] [-f] [[-r] REV] merge working directory with another revision ... snipped text options: -f --force force a merge with outstanding changes -t --tool VALUE specify merge tool -r --rev REV revision to merge -P --preview review revisions to merge (no merge is performed) --mq operate on patch repository use "hg -v help merge" to show global options
Modifier: debugsetparents travaillé bien:
hg debugsetparents . 1 hg commit -m "merged to get rid of changeset #1"
Modifier: Tentative d'utilisation du
--tool internal:local
selon à l'une des réponses:
@echo off
setlocal
if exist repo rd /s /q repo
hg init repo
cd repo
rem revision 0
echo >test1.txt
hg commit -m "test1" --addremove
rem revision 1
echo >test2.txt
hg commit -m "test2" --addremove
rem revision 2
hg update 0
echo >test3.txt
hg commit -m "test3" --addremove
rem now let's get rid of change in revision 1 with merge
hg merge --tool internal:local -r 1
hg commit -m "merged"
dir
sortie d'exécution:
[C:\Temp] :test adding test1.txt adding test2.txt 0 files updated, 0 files merged, 1 files removed, 0 files unresolved adding test3.txt created new head 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) Volume in drive C is unlabeled Serial number is 0e17:6aba Directory of C:\Temp\repo\* 16.11.2010 20:05 . 16.11.2010 20:05 .. 16.11.2010 20:05 .hg 16.11.2010 20:05 13 test1.txt 16.11.2010 20:05 13 test2.txt 16.11.2010 20:05 13 test3.txt 39 bytes in 3 files and 3 dirs 12 288 bytes allocated 66 600 316 928 bytes free
Ici, les changements introduits dans le 2ème changeset (celui avec le numéro de révision 1), est maintenant présent dans le changeset fusionné. Ce n'est pas ce que je voulais.
'hg debugsetparents. REV2' suivi d'un 'hg merge' a bien fonctionné, merci. –
Très utile pour un développeur iOS, nous utilisons MacHG qui ne prend pas en charge la fonction "Supprimer toutes les modifications de la révision de la cible de fusion (autre)". –
Juste pour ma propre référence (comme je suis souvent revenu ici, essayant de m'en souvenir): on veut exécuter 'hg debugsetparents'. Cela peut être déduit de l'aide docs mais n'est pas vraiment * évident *. –