2009-12-13 6 views
41

Ho appena fatto un svn merge per unire le modifiche dal tronco di un ramo:svn: Come annullare una fusione (senza commit)?

$ svn merge -r328:HEAD file:///home/user/svn/repos/proj/trunk . 
--- Merging r388 through r500 into '.': 
A foo 
A bar 
    C baz1 
    C baz2 
U duh 
[...] 

ma c'erano troppi conflitti, quindi mi piacerebbe per annullare questo.

Un modo per farlo è di eseguire il commit e quindi unire di nuovo. Ma non posso impegnarmi a causa dei conflitti. Qual è il modo migliore per annullare in tal caso?

risposta

7

Finché non si è impegnati, è sempre possibile eseguire un ripristino per annullare tutte le modifiche.

+0

Hmm, appena 'svn revert .' fatto niente. – Frank

+0

OK, allora dovresti prima risolvere tutto, poi fare il ripristino. – tangens

+6

... e come @rq ha detto, non dimenticare il flag -R per eseguire il ripristino in modo ricorsivo. – tangens

96

invertire ricorsivamente dalla parte superiore della vostra copia di lavoro:

svn revert -R .

Sarà necessario eliminare manualmente i file che sono stati aggiunti. Come nel dopo aver ripristinato, i file aggiunti rimarranno sul disco ma saranno in uno stato non-cingolato ("foo?")

+2

Questo comando ripristinerà anche eventuali modifiche locali esistenti prima della fusione, anche se corrette? – NeilMonday

+4

@NeilMonday true, ma in questo caso non è necessario fondersi in una copia di lavoro con modifiche locali non correlate alla fusione. – richq

-11

Basta fare svn resolve su tutti i conflitti in ogni caso e si impegnano:

$ svn resolved baz1 
$ svn resolved baz2 
$ svn ci -m "oops. bad merge. will revert." 
Transmitting file data ...... 
Committed revision 501. 

Poi , ufficialmente annullarlo dalla fusione di nuovo a dove era:

$ svn merge -r501:500 
--- Reverse-merging r319 into '.': 
[...] 

Questo è tutto, l'unione è stata annullata nella directory. Ora che anche commettere:

$ svn ci -m "bad merge has been undone" 
Transmitting file data ...... 
Committed revision 502. 

Il vantaggio rispetto al svn revert -R . metodo è che i file che sono stati aggiunti vengono rimossi tutti correttamente.

+0

Ho trovato questo fuori me stesso, quindi sto rispondendo alla mia domanda onw. :) – Frank

+13

Questo è totalmente * non * il modo in cui avresti dovuto farlo! – richq

+3

Non vuoi davvero essere pasticcio di marcatori di conflitto nella storia * permanente * del tuo repository, vero ?! Che schifo. – bendin

2

Ho affrontato la stessa situazione, anche io ho avuto alcuni altri cambiamenti che non volevo perdere. Così, invece della piena revert ricorsiva solo svn revert per gli elementi in conflitto è stato un bene per me

svn revert baz1 baz2