Pregunta

¿Cuál es la forma más sencilla de deshacer una confirmación en concreto que es:

  • no en la cabeza o la cabeza
  • ¿Se ha llevado a la distancia.

Debido a que no si es la última confirmación,

git reset HEAD

no funciona. Y porque ha sido empujado a un mando a distancia,

git rebase -i

y

git rebase --onto

causará algún problema en los mandos a distancia.

Más aún, no quiero que modificar la historia realmente. Si había mal código, que estaba allí en la historia y puede ser visto. Sólo quiero que en la copia de trabajo, y no me importa una fusión inversa cometió.

En otras palabras, ¿cuál es la Git equivalente de los siguientes comandos de SVN :

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

que elimina todos los cambios de 295 a 302 fusión inversa todos los cambios en esas revisiones, como una nueva confirmación.

svn merge -c -302 ^/trunk

que deshace el 302 confirmación, por supuesto, por la adición de otro commit que fusiona inversa confirmar los cambios de ese respectivo.

Yo pensé que debería ser una operación bastante simple en Git y un caso de uso bastante común. ¿Qué otra cosa es el punto de confirmaciones atómicas?

Hemos puesta en escena esconder y todos para asegurar las confirmaciones son perfectamente atómica, ¿no deberías ser capaz de deshacer una o más de esas confirmaciones atómicas fácilmente?

¿Fue útil?

Solución

Identificar el hash de la confirmación, mediante git log, a continuación, utilizar git revert <commit> para crear un nuevo commit que elimina estos cambios. En cierto modo, git revert es lo contrario de git cherry-pick -. Esto último se aplica el parche a una rama que le falta es, los antiguos lo elimina de una rama que lo tiene

Otros consejos

No me gusta el auto-commit que git revert hace, por lo que este podría ser útil para algunos.

Si lo que desea es que los archivos modificados no es el auto-commit , puede utilizar --no-commit

% git revert --no-commit <commit hash>

que es el mismo que el -n

% git revert -n <commit hash>

Debido a que ya ha sido empujado, no debe manipular directamente la historia. git revert revertirá los cambios específicos de una confirmación mediante una nueva confirmación, a fin de no cometer manipular la historia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top