2010-07-23 7 views
12

Il mio collega ha eseguito il commit due volte sul suo repository sul ramo sbagliato.Come posso rimuovere alcuni commit in Mercurial che sono stati applicati al ramo sbagliato e quindi rigiocarli su quello corretto?

Qual è il modo più efficace per prendere quei due commit, sbarazzarsi di loro e quindi commetterli correttamente sotto il ramo destro? (le modifiche non sono state inserite)

Preferiamo un modo per farlo all'interno di TortoiseHG ma, naturalmente, useremo la riga di comando se è l'opzione migliore.

+0

Ciò potrebbe contribuire sul lato TortoiseHg: http://stackoverflow.com/questions/2963250/how-to-remove-accidental-branch-in-tortoisehg/2974657#2974657 – VonC

risposta

6

Da quello che ho scoperto, il trapianto è la migliore estensione da usare. Applica un changset a qualsiasi altra revisione che desideri.

http://mercurial.aragost.com/kick-start/tasks.html#transplanting-changes

La soluzione al mio problema era di aggiornare al ramo dove avrebbero dovuto essere applicate le due modifiche, il trapianto di due changeset e quindi utilizzare mq sottrarre alle modifiche. Anche tutti possono fare la tartaruga.

14

L'estensione Mercurial Queues (mq) può essere d'aiuto.

dato una cronologia delle modifiche che assomiglia a questo:

@ changeset: 3:9dc681b56325 
| summary:  file4 
| 
o changeset: 2:6675b3f86aa7 
| summary:  file3 
| 
| o changeset: 1:4a3209ed5b2f 
|/ summary:  file2 
| 
o changeset: 0:6ab45ac3bd6d 
    summary:  file1 

I seguenti comandi del file si muove 'file4' changeset sull'altro ramo (la testa 'file2'):

hg qimport -r 3  // convert revision 3 to a patch 
hg qpop    // remove it 
hg update 1   // switch to the other branch head 
hg qpush   // push the change back 
hg qfin -a   // convert the applied patch back to a changeset 

Con conseguente :

@ changeset: 3:3faa754edb0b 
| summary:  file4 
| 
| o changeset: 2:6675b3f86aa7 
| | summary:  file3 
| | 
o | changeset: 1:4a3209ed5b2f 
|/ summary:  file2 
| 
o changeset: 0:6ab45ac3bd6d 
    summary:  file1 

nota che l'hash di modifiche per rev 3 modificato, a causa del changeset avente differiscono ora genitore Versioni successive di TortoiseHg supportano anche l'estensione MQ.