2009-12-13 28 views
41

que acabo de hacer un svn merge fusionar los cambios de tronco a una rama:svn: ¿Cómo deshacer una fusión (sin confirmación)?

$ 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 
[...] 

pero había demasiados conflictos, así que me gustaría que deshacer.

Una forma de hacerlo es confirmar y volver a fusionar. Pero no puedo comprometerme debido a los conflictos. ¿Cuál es la mejor manera de deshacer en ese caso?

Respuesta

7

Mientras no se haya comprometido, siempre puede volver a deshacer todos los cambios.

+0

Hmm, simplemente 'svn revert .' no hice nada. – Frank

+0

OK, entonces debería resolver todo primero, luego hacer la reversión. – tangens

+6

... y, como dijo @rq, no olvides el indicador -R para hacer la reversión recursivamente. – tangens

96

Revert recursiva de la parte superior de su copia de trabajo:

svn revert -R .

Usted tendrá que eliminar manualmente los archivos que se han añadido. Al igual que en después de volver, los archivos añadidos permanecerán en el disco, pero van a estar en un estado de no-seguimiento ("foo?")

+2

Este comando también revertirá las modificaciones locales que existían antes de realizar la fusión, aunque es correcto? – NeilMonday

+4

@NeilMonday cierto, pero de todos modos no debería fusionarse en una copia de trabajo con cambios locales, no relacionados con la fusión. – richq

-11

Eso sí, svn resolve en todos los conflictos de todos modos y se comprometen:

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

Entonces , deshacer oficialmente mediante la fusión de vuelta a donde estaba:

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

Eso es todo, la fusión se ha deshecho en el directorio. Ahora eso también cometen:

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

La ventaja sobre el svn revert -R . método es que los archivos que se han añadido se eliminan todas correctamente.

+0

Me enteré de esto, así que estoy respondiendo mi pregunta onw. :) – Frank

+13

¡Esto es totalmente * no * de la forma en que debería haberlo hecho! – richq

+3

No desea realmente estar vomitando marcadores de conflicto en la historia * permanente * de su repositorio, ¿o sí? Yuck. – bendin

2

Me enfrenté a la misma situación, también tuve algunos otros cambios que no quería perder. Así, en lugar de la plena reversión recursiva simplemente svn revert para los elementos en conflicto era bueno para mí

svn revert baz1 baz2 
Cuestiones relacionadas