2009-05-18 12 views
15

¿Cómo revertir un solo trozo en Mercurial, de forma similar a como se hace en los darcs, es decir, me pregunta por cada trozo y archivar si deseo revertirlo? ¿Es posible usar TortoiseHg?Mercurial: Revertir un solo trozo

Gracias

+0

Tal vez deberías especificar qué es un trozo. No tengo mucha experiencia con Hg pero no he visto este nombre en el documento cuando lo he leído, y la búsqueda 'trozo' en el Wiki da 0 resultados ... – PhiLho

+2

Por "trozo" me refiero a un "fragmento de cambio ", es decir, una parte de la" diferencia ". TortoiseHg usa esta terminología y también lo hace darcs. –

+0

Puede configurar una herramienta externa de diferencias (por ejemplo: TortoiseGitMerge) en las opciones de TortoiseHg, e iniciarla seleccionando "Diferenciar a padres" en el menú contextual que aparece sobre su archivo en TortoiseHg. Desde la herramienta diff, es fácil detectar y revertir los trozos por separado. – wil

Respuesta

4

El record extension se inspira en darcs record. Le permitirá agregar solo trozos específicos a la siguiente confirmación, es decir, lo contrario de lo que desea. Pero puedes agregar todos los bloqueos excepto el que quieras revertir y luego hacer un hg revert para revertirlo. Un poco hacia atrás, lo sé ... :-)

También puede hacer hg diff > patch; hg revert, editar patch eliminar el trozo y hacer hg import --no-commit a reappy el parche. Es probable que sea más rápido, pero requiere que edite manualmente el parche. He tenido un gran éxito con el Emacs diff-mode, pero ya que preguntas sobre TortoiseHg es posible que no quieras usar Emacs.

+0

Uso Emacs todo el tiempo, simplemente no estoy completamente familiarizado con el soporte de Hg. Lo investigaré y espero que sea como cualquier otro modo de VC ... ¡Gracias por la sugerencia! –

+0

Genial. Solo he usado Mercurial un poco desde Emacs: 'C-x v =' hace un 'hg diff' en el archivo actual, y' C-x v v' hace 'hg commit' en el archivo actual. Eso a veces es agradable cuando trabajo en un repositorio donde sé que registrar solo el archivo está bien. En cuanto a la edición del parche, eso es independiente de Mercurial. Simplemente utiliza el modo diff de Emacs, que sabe cómo actualizar los números de línea cuando elimina cosas de un parche. –

4

Para revertir un conjunto de cambios en un solo intento archivo:

hg diff -c | parche -R

Eso invertirá el conjunto de cambios introducido por esa revisión en ese nombre de archivo. Ahora bien, si se pudiera incluir el mismo comportamiento de estilo cereza de darcs/git en eso, de alguna manera, estaría muy feliz.

+1

Probablemente necesite hacer ese 'patch -R -p1' o niveles más altos de' -p', dependiendo de su directorio de trabajo actual dentro del repositorio. –

7

En realidad mercurial se refiere a "trozos", al menos en la herramienta Shelve. Lo que me lleva a la forma favorita de revertirlos (y las funciones favoritas de TortoiseHg).

Simplemente mueva los trozos que desea revertir a un estante que cree únicamente con la intención de eliminar. Esto funciona muy bien siempre que los fragmentos se identifiquen como los necesita. Si no, no tienes más remedio que hacer algo manualmente.

Si usa TortoiseHg Workbench o VisualHg, es muy fácil acceder a la herramienta Shelve: hay un botón al lado de los botones de alternar del modo diff. Si no está familiarizado con los estantes, hágase un favor y comience a usarlo. Me ha ahorrado mucho agravio cuando olvidé comprometerme temprano, o decidí dejar de lado el código experimental de una confirmación.

+1

¡Ahora, hay un botón llamado "Eliminar fragmentos seleccionados" presente! Difícilmente lo descubriría yo mismo, gracias :) – vines

Cuestiones relacionadas