Deshacer un particular, se comprometen en Git que ha sido empujado a pases remotos
-
22-09-2019 - |
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?
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.