Accidentalmente envié demasiados archivos a un repositorio SVN y cambié algunas cosas que no quería. (Suspiro). Para volver a su estado anterior, lo mejor que pude encontrar fue
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
Dios! ¿No hay mejor manera? ¿Por qué no puedo escribir algo como esto?
svn revert -r 854 l3toks.dtx
De acuerdo, solo estoy usando v1.4.4, pero hojeé la lista de cambios para la rama 1.5 y no pude ver nada directamente relacionado con esto. ¿Yo me perdí algo?
Editar: supongo que no estaba lo suficientemente claro. No creo que quiera fusión inversa, porque entonces voy a perder los cambios que hice quieren hacer! Diga eso fileA
y fileB
ambos fueron modificados pero solo quería comprometerme fileA
; escribiendo accidentalmente
svn commit -m "small change"
confirma ambos archivos, y ahora quiero retroceder fileB
. La fusión inversa hace que esta tarea no sea más fácil (por lo que puedo decir) que los pasos que describí anteriormente.
Respuestas:
o
Los dos comandos son equivalentes .
fuente
svn merge -c -854 my.file
, y luego lo hagosvn diff
, parece mostrar una revisión antes de 854 (es decir, 853 ); solo cuando lo hagosvm merge -c 854 myfile
(sin el-
), parece que mi archivo se revierte a rev 854. Gracias de nuevo, ¡salud!Consulte la sección " deshacer cambios " del libro svn
fuente
lamento usar un poco de espacio solo para reiterar la respuesta dada anteriormente, pero esto es algo con lo que siempre termino en problemas.
Digamos que actualicé los archivos locales a la última revisión, que es 854. Luego, me gustaría obtener una revisión anterior: la versión del archivo de algunas revisiones anteriores, digamos la revisión 851.
Copiar funcionaría:
.. sin embargo, no puedo molestarme grepping para la URL del repositorio :)
La actualización aparentemente podría funcionar:
... sin embargo, también marca la copia local como "recién retirada", o más bien "igual que la revisión en línea" (es decir, en Tortoise / RabbitVCS obtienes una marca de verificación verde OK), lo que significa que no puedes hacerlo
svn ci -m "rolled back to r 851"
: simplemente porque el localsubversion
El ejecutable no notará ningún cambio local y no se molestará en cargar nada en el repositorio en línea.Y, como ya se respondió, la fusión inversa funciona, pero en este caso, no se debe confiar en la sintaxis de acceso directo; pero específicamente declara:
Debo admitir que nunca entendería la frase " Fusión inversa de r854 a r852 en el archivo " que significa " Acabo de obtener r851 de su archivo y sobrescribí lo que tenía anteriormente localmente, y está marcado como diferente de la última revisión en línea, así que puedes volver a revisarlo en línea como una nueva revisión de " reversión ", pero supongo (y espero :) que eso es lo que hace :)
Después de esto, uno puede usar
svn diff
para asegurarse rápidamente si recuperamos localmente la revisión correcta; y también, el archivo estará marcado con un signo de exclamación rojo en Tortoise / RabbitVCS (es decir, diferente de la última versión confirmada), por lo quesvn ci -m "rolled back to r 851"
puede ejecutarse esta vez.Además, tenga en cuenta que si finalmente cambia de opinión después de la fusión inversa ( es decir, de todos modos quiere seguir trabajando en la última revisión HEAD, aquí 854) después de haber regresado a 851 localmente, pero aún no ha cometido la reversión ), no debe usarlo
svn up
, ya que simplemente dirá que ya está " en la revisión 854 "; utilizar en su lugarsvn revert --recursive .
o similar ...¡Salud!
Ref: Cómo deshacer los cambios usando Subversion - Jacob Wright - Flex, AIR, PHP, etc.
EDITAR: ... y aparentemente, el mismo efecto que
svn merge -r HEAD:851 l3toks.dtx
se puede lograr con:fuente
--force
para sobrescribir directorios. Solo recuerda que sobrescribirá cualquier cambio.svn export
, ¿me estoy perdiendo algo o simplemente no está implementado en estas GUI?Recientemente tuve que volver a una revisión particular para depurar una versión anterior y esto funcionó como magia:
Tuve que resolver todos los conflictos usando la opción "tc" ya que no me importaban los cambios locales (marqué todo lo que me importaba antes de revertir)
Volver a la revisión de la cabeza también fue simple:
fuente
Lo que estás buscando se llama "fusión inversa". Debería consultar los documentos sobre la función de fusión en el libro SVN (como señala luapyad, o más precisamente el primer comentarista en esa publicación, señala). Si está utilizando Tortoise, también puede acceder a la vista de registro y hacer clic derecho y elegir "revertir los cambios de esta revisión" en la que cometió el error.
fuente
La fusión inversa es exactamente lo que quieres (ver la respuesta de luapyad). Simplemente aplique la fusión al archivo comprometido erróneamente en lugar de todo el directorio.
fuente
Si solo desea deshacer el último registro, puede usar lo siguiente
De esa manera, no tiene que buscar los números de versión actual y anterior.
fuente
svn merge fusionará las revisiones, no las revertirá. es decir, si tiene alguna adición en su versión HEAD, combínela con una revisión anterior, entonces el cambio persistirá.
Utilizo svn cat y luego lo redirijo al archivo:
Luego tiene el contenido 851 en ese archivo y puede volver a ingresarlo.
fuente
Si usa el IDE de Eclipse con el complemento SVN , puede hacer lo siguiente:
Esto revertirá los archivos a la revisión que desee. Solo tenga en cuenta que SVN verá los cambios como una nueva confirmación. Es decir, el cambio obtiene un nuevo número de revisión y no hay ningún vínculo entre la revisión anterior y la nueva. Debe especificar en los comentarios de confirmación que revierte esos archivos a una revisión específica.
fuente