svn revertir ¿Cómo vuelvo a una versión anterior de nuestro código en Subversion?




revertir un commit en svn (11)

Básicamente, debe "fusionar hacia atrás": aplique una diferencia entre la versión actual y la anterior a la versión actual (para que termine con una copia de trabajo que se parece a la versión anterior) y luego vuelva a confirmar. Por ejemplo, para pasar de la revisión 150 (actual) a la revisión 140:

svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"

El Libro Rojo de Subversion tiene una buena sección sobre esto .

Estoy trabajando en un proyecto con un amigo y quiero volver a una versión anterior de nuestro código y configurarlo para que sea la actual. ¿Cómo lo hago?

Estoy usando "anksvn" en vs08.

Tengo la versión que quiero en mi PC, pero la confirmación está fallando; El mensaje que recibo es "error de confirmación, archivo o directorio no actualizado".

También tengo el cliente de subversion en mi PC.


La razón por la que no puede hacer nada directamente con la buena copia que tiene en su PC es que sus carpetas .svn saben que es un código del pasado, por lo que requiere una actualización. Pero solo se pueden realizar cambios al principio del historial de subversión.

Puedes usar

svn update -r <earlier_revision_number>

para revisar varias versiones anteriores de su proyecto, hasta que encuentre el número de revisión correcto, de su buena versión. Cuando lo haya encontrado, actualice a la revisión más reciente (principal), luego aplique la combinación svn como se sugiere anteriormente.

Si realmente no puede encontrarlo, y necesita confirmar la copia en su PC, obtenga una nueva actualización a la última versión y copie su versión "buena" sobre la parte superior de la misma (¡ sin las carpetas .svn!). Elimine los archivos que no estaban en la copia correcta de las carpetas y de Subversion, y confirme lo que tiene ahora.


Un poco más de la vieja escuela.

svn diff -r 150:140 > ../r140.patch
patch -p0 < ../r140.patch

entonces lo usual

svn diff
svn commit

Creo que esto es lo más adecuado:

Realice la fusión hacia atrás, por ejemplo, si el código confirmado contiene la revisión de la rev 5612 a la 5616, simplemente fusione hacia atrás. Funciona en mi final.

Por ejemplo:

svn merge -r 5616:5612 https://<your_svn_repository>/

Contendría un código fusionado de nuevo a la revisión anterior, luego podría cometerlo.


La forma estándar de usar la combinación para deshacer todo el check-in funciona muy bien, si eso es lo que quiere hacer. A veces, sin embargo, todo lo que desea hacer es revertir un solo archivo. No hay una forma legítima de hacerlo, pero hay un hack:

  1. Encuentra la versión que deseas usando svn log.
  2. Utilice el subcomando de exportación de svn:

    svn exportar http: // url-to-your-file @ 123 / tmp / filename

(Donde 123 es el número de revisión para una buena versión del archivo). Luego mueva o copie ese único archivo para sobrescribir el anterior. Comprueba el archivo modificado y listo.


Lo siguiente me ha funcionado.

Tuve muchos cambios locales y tuve que descartarlos de la copia local y sacar la última versión estable en SVN.

  1. Compruebe el estado de todos los archivos, incluidos los archivos ignorados.

  2. Grep todas las líneas para obtener los archivos recién agregados e ignorados.

  3. Reemplace aquellos con // .

  4. y rm -rf todas las lineas.

    svn status --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"


Esto es lo que hice y trabajé para mí.

Quiero deshacer los cambios en múltiples confirmaciones que hice en ciertos momentos y quiero ir al punto de confirmación anterior.

  1. Ir al equipo -> Mostrar historial.
  2. Haga clic con el botón derecho en el rango de revisiones que desee ignorar.
  3. Seleccione la opción "Revertir cambios".

Esto ejecutará una combinación inversa, deshaciendo los cambios en su copia de trabajo.

Solo revisa el código y confirma.


Sincroniza con la versión anterior y confía. Esto debería funcionar.

Aquí también hay una explicación de deshacer los cambios.


La mayoría de las respuestas anteriores han estado utilizando una combinación inversa, y esa suele ser la respuesta correcta. Sin embargo, hay una situación (que me acaba de suceder) donde no lo es.

Accidentalmente cambié un archivo con finales de línea Unix a finales de línea DOS al hacer un pequeño cambio, y lo confirmé. Esto se puede deshacer fácilmente, ya sea cambiando los finales de línea y confirmando de nuevo, o mediante una combinación inversa, pero tiene el efecto de hacer que svn blame list my edit como la fuente de cada línea del archivo. (Curiosamente, TortoiseSVN en Windows no se ve afectado por esto; solo la línea de comandos tiene la svn blame ).

Si desea mantener el historial como lo indica svn blame , creo que debe hacer lo siguiente:

  • Eliminar el archivo y cometer.
  • En el repositorio, copie la copia correcta del archivo en la cabecera y confirme.
  • Restaura cualquier edición que quieras mantener.

La eliminación asusta un poco, pero recuerda que siempre tienes el archivo guardado en el repositorio, por lo que restaurarlo no es un gran problema. Aquí hay un código para ilustrar los pasos. Supongamos que xxx es el número de revisión de la última copia válida.

svn rm svn+ssh://path/to/file
svn copy svn+ssh://path/to/[email protected] svn+ssh://path/to -m"Restore good copy"
svn update
<restore the edits>
svn commit -m"Restore edits"

Tenga en cuenta que para una copia en el repositorio, el destino debe ser un directorio, no un nombre de archivo.


Haga clic derecho en el proyecto> Reemplazar con> Revisión o URL> Seleccione la revisión específica que desea revertir.

Ahora confirme la versión del código de actualización local en el repositorio. Esto revertirá el código base a la revisión específica.


Haga clic con el botón derecho en la jerarquía más alta que desee revertir >> Revert o Revert to Revision







backport