2011-03-05 13 views
6

Aquí está el panorama:¿Puedo revertir una confirmación específica tal que deje lo que se eliminaría como no instanciado en el archivo?

-I hizo muchas modificaciones pequeñas y grandes a mis archivos y no cometió ellos

-I decidió utilizar y utilizar el comando parche para piezas teatrales de confirmaciones

-I trató de salir de todas las confirmaciones pertinentes cuando lo hice

-I descubierto después de múltiples compromete a que accidentalmente puse en un cambio que tenía que dejar de lado, en primer lugar 6 comete atrás, por lo que revirtió que cometer

-El revertir borró el texto relevante en el archivo, que es el comportamiento esperado.

El último paso es el que quiero modificar. Lo que quiero hacer es revertir una confirmación, pero dejo el texto en el archivo para poder volver a escenificar la confirmación. La forma en que lo hice fue difiriendo la HEAD de la confirmación antes de revertir el commit, y luego copié y pegué el texto y lo modifiqué para que no estuviera en formato diff para poder usarlo en el archivo, y luego lo comprometí correctamente.

Me doy cuenta de que necesito aprender el hábito de comprometerme temprano y con frecuencia. Todavía no me he acostumbrado, ya que le gusta interrumpir mi modo de pensar cuando me estoy desconectando.

La forma en que lo arreglé fue tediosa. ¿Hay alguna manera de dejar el texto en un archivo que se eliminará en un reverso como si fuera un cambio no evaluado (algo así como reiniciar)? ¿Alguna sugerencia más allá de eso?

Respuesta

7

Puede ejecutar la operación de revertir dos veces, y la última vez aplicar --no-commit que dejará a los cambios en el índice listo para cometer:

git revert <the commit you want back in the working tree> 
git revert HEAD --no-commit 

Los cambios se realizaron y ahora listo para un nuevo compromiso. Para ejecutar unstage:

git reset HEAD 
+2

Puede decir 'git revert --no-commit HEAD' para el segundo (no necesita conocer su id. De confirmación). –

+0

¡Genial! Gracias. Debería haber pensado en eso :) ... lo editaré en. – asgerhallas

+0

Esta es una muy buena manera de deshacer commits sobre muchos archivos, y generalmente cuando uno no quiere especificar archivos. Gracias. – minozake

0
git reset -p <COMMITHASH> 

Esto le pedirá que vuelva a aplicar el parche a su índice.

Recuerde que esto elegirá los cambios de la confirmación mencionada en el índice, lo que significa que intentará aplicar (a la inversa) las 6 confirmaciones anteriores a su índice. Debes elegir solo los cambios que deseas eliminar.

+0

Esto es bueno para múltiples revierte más de una serie de confirmaciones (puede ser distribuido de ninguna manera), pero en este caso he tenido una reversión específica para elegir, por lo que este método podría ser un poco tedioso para trabajar, especialmente si tuviera que editar trozos manualmente. De todos modos, gracias por la respuesta. – minozake

0

Después revirtió la confirmación, se podría aplicar la operación de revertir a la inversa para “unrevert” sólo en el árbol de trabajo:

git revert C &&     # you already did this part 
git show HEAD | git apply -R 

Por defecto, sólo se git apply parches del árbol de trabajo. También tiene opciones para parchar solo el índice o ambos, el índice y el árbol de trabajo. Así, en lugar de utilizar git revert, se podría haber utilizado git apply para aplicar los cambios a la inversa a sólo el índice y luego comprometerse (todo sin tener que tocar el árbol de trabajo):

# assumption: we start with no staged changes, and have not reverted anything yet 

# revert C directly in the index (does not touch the working tree), then commit 
git show C | git apply --cached -R && 
git commit --edit -m'Reverted C' 
2

Después de ejecutar el git revert BADCOMMIT se puede restaurar un archivo en particular a su estado antes de que se comprometan con:

git checkout HEAD^ -- filename 

... que debe actualizar su copia de trabajo de filename a su estado antes de la operación de revertir cometió. (La versión anterior también se organizará, por lo que si desea volver a grabarla, realice el git reset HEAD -- filename). No creo que haya una manera más fácil de hacerlo.

+0

Esto ayudó mucho. Estoy seguro de que usaré esto un poco hasta que aprenda una buena práctica de compromiso. – minozake

Cuestiones relacionadas