Cancelar un commit específico en git que ha sido portado a repositorios remotos

¿Cuál es la forma más fácil de cancelar un compromiso específico que:

  • no en la cabeza o la cabeza
  • Se hizo clic en una computadora remota.

Porque si esta no es la última solución,

 git reset HEAD 

no funciona Y desde que se hizo clic en el mando a distancia,

 git rebase -i 

y

 git rebase --onto 

Causará algunos problemas en las consolas.

Además, no quiero cambiar realmente la historia. Si había un código malo, estaba allí en la historia y se puede ver. Solo quiero que esté en una copia de trabajo, y no me importa arreglar la fusión.

En otras palabras, lo que significa Git es equivalente a los siguientes comandos svn:

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

que elimina todos los cambios de 295 a 302 mediante la fusión inversa de todos los cambios en estas revisiones como un nuevo compromiso.

 svn merge -c -302 ^/trunk 

que cancela la confirmación 302, por supuesto, agregando otra confirmación, que invierte los cambios converge con la confirmación correspondiente.

Pensé que debería ser una operación bastante simple en Git y un caso de uso bastante común. ¿Cuál es el significado de los compromisos atómicos?

Tenemos escondites y todo para garantizar que los compromisos sean completamente atómicos, ¿no puede cancelar uno o más de estos atómicos fácilmente arreglados?

527
23 февр. establecido por Lakshman Prasad el 23 de febrero 2010-02-23 17:21 '10 a las 17:21 2010-02-23 17:21
@ 3 respuestas

Defina un hash de confirmación utilizando git log , luego use git revert <commit> para crear una nueva confirmación que elimine estos cambios. En cierto sentido, git revert es el símbolo inverso de git cherry-pick : este último aplica un parche a una rama que le falta, el primero lo elimina de la rama que lo tiene.

829
23 февр. La respuesta la da Andrew Aylett el 23 de febrero. 2010-02-23 17:31 '10 a las 17:31 2010-02-23 17:31

No me gusta el auto-commit para git revert , así que esto puede ser útil para algunos.

Si desea que los archivos modificados no se confirmen automáticamente , puede usar --no-commit

 % git revert --no-commit <commit hash> 
border=0

que es lo mismo que -n

 % git revert -n <commit hash> 
250
17 мая '13 в 1:50 2013-05-17 01:50 la respuesta es dada naomik 17 de mayo, 13 a 1:50 2013-05-17 01:50

Como ya se presionó, no debes manipular directamente la historia. git revert devolverá ciertos cambios desde la confirmación utilizando una nueva confirmación para no manipular el historial de confirmación.

30
23 февр. Respuesta dada por moatPylon el 23 de febrero. 2010-02-23 17:28 '10 a las 17:28 2010-02-23 17:28

Otras preguntas sobre las etiquetas o Ask a Question