tortoise - ¿Cómo puedo revertir una confirmación SVN?
tortoise merge (12)
Alex, prueba esto: svn merge [WorkingFolderPath] -r 1944: 1943
He encontrado varios ejemplos de cómo revertir un compromiso SVN como
svn merge -r [current_version]:[previous_version] [repository_url]
o
svn merge -c -[R] .
Pero ninguno de los dos parece funcionar. Probé esos comandos y verifiqué los archivos que fueron cambiados a mano.
¿Cómo revertir una confirmación con el número de revisión 1944? ¿Cómo compruebo que se haya realizado la reversión (sin mirar en el archivo real los cambios se han revertido)?
Ambos ejemplos deben funcionar, pero
svn merge -r UPREV:LOWREV .
rango de deshacer
svn merge -c -REV .
deshacer una sola revisión
en esta sintaxis: si el directorio actual es WC y (como debe hacerse después de cada fusión), confirmará los resultados
¿Quieres ver los registros?
Es imposible "anular" una revisión, pero puede revertir su copia de trabajo a la versión 1943 y confirmarla como versión 1945. Las versiones 1943 y 1945 serán idénticas y revertirán efectivamente los cambios.
Intenté lo anterior, ( svn merge
) y tienes razón, lo hace jack. sin embargo
svn update -r <revision> <target> [-R]
parece funcionar, pero no es permanente (mi svn simplemente muestra una revisión anterior). Así que tuve que
mv <target> <target backup>
svn update <target>
mv <target backup> <target>
svn commit -m "Reverted commit on <target>" <target>
En mi caso particular, mi objetivo es interfaces/AngelInterface.php
. Hice cambios en el archivo, los confirmé, actualicé la computadora de compilación, ejecuté el compilador phpdoc y descubrí que mis cambios eran una pérdida de tiempo. svn log interfaces/AngelInterface.php
muestra mi cambio como r22060 y la confirmación anterior en ese archivo fue r22059. Entonces puedo svn update -r 22059 interfaces/AngelInterface.php
y termino con el código como estaba en -r22059 de nuevo. Entonces :-
mv interfaces/AngelInterface.php interfaces/AngelInterface.php~
svn update interfaces/AngelInterface.php
mv interfaces/AngelInterface.php~ interfaces/AngelInterface.php
svn commit -m "reverted -r22060" interfaces/AngelInterface.php
Alternativamente, podría hacer lo mismo en un directorio, especificando . -R
. -R
en lugar de interfaces/AngelInterface.php
en todo lo anterior.
Lo siguiente hará un recorrido en seco, como dice. HEAD es la versión actual, PREV es anterior, luego la ruta a su archivo o elemento confirmado:
svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk
Si la ejecución en seco se ve bien, ejecute el comando sin la ejecución --dry-run
Verifique el cambio en la revisión y vuelva a confirmar. Para buscar números de versión, intente:
svn log
Primero, revertir la copia de trabajo a 1943.
> svn merge -c -1943 .
En segundo lugar, verifique qué está a punto de ser comprometido.
> svn status
Tercero, cometer la versión 1945.
> svn commit -m "Fix bad commit."
Cuarto, mira el nuevo registro.
> svn log -l 4
------------------------------------------------------------------------
1945 | myname | 2015-04-20 19:20:51 -0700 (Mon, 20 Apr 2015) | 1 line
Fix bad commit.
------------------------------------------------------------------------
1944 | myname | 2015-04-20 19:09:58 -0700 (Mon, 20 Apr 2015) | 1 line
This is the bad commit that I made.
------------------------------------------------------------------------
1943 | myname | 2015-04-20 18:36:45 -0700 (Mon, 20 Apr 2015) | 1 line
This was a good commit.
------------------------------------------------------------------------
Si bien las sugerencias dadas ya pueden funcionar para algunas personas, no funciona para mi caso. Al realizar la combinación, los usuarios de la rev 1443
que actualizaron a la rev 1445
, aún sincronizan todos los archivos modificados en 1444
, aunque son iguales a 1443
de la combinación. Necesitaba que los usuarios finales no vieran la actualización en absoluto.
Si desea ocultar completamente el compromiso, es posible creando una nueva rama en la revisión correcta y luego intercambiando las ramas. Lo único es que necesitas eliminar y volver a agregar todos los bloqueos.
copy -r 1443 file:///<your_branch> file:///<your_branch_at_correct_rev>
svn move file:///<your_branch> file:///<backup_branch>
svn move file:///<your_branch_at_correct_rev> file:///<your_branch>
Esto funcionó para mí, quizás sea útil para alguien más por ahí =)
Si desea eliminar completamente las confirmaciones del historial, también puede hacer un volcado del repositorio en una revisión específica y luego importar ese volcado. Específicamente:
svnrdump dump -r 1:<rev> <url> > filename.dump
El comando svnrdump realiza la misma función que svnadmin dump pero funciona en un repositorio remoto.
A continuación, simplemente importe el archivo de volcado en el repositorio de su elección. Esto fue probado para funcionar bien en Beanstalk.
Si está utilizando el cliente TortoiseSVN , puede hacerlo fácilmente a través del cuadro de diálogo Mostrar registro .
svn merge -r 1944:1943 .
Debería revertir los cambios de r1944 en su copia de trabajo. Luego puede revisar los cambios en su copia de trabajo (con diff), pero tendría que confirmar para aplicar el revertir en el repositorio.
F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 /
&& svn commit -m "undid rev $REV" $F
svn merge -c -M PATH
Esto me salvó la vida.
Estaba teniendo el mismo problema, después de volver también no estaba viendo el código antiguo. Después de ejecutar el comando anterior obtuve un código de versión anterior limpio.