¿Cómo puedo revertir un rango de confirmaciones en git? Al mirar la documentación de gitrevisions , no puedo ver cómo especificar el rango que necesito. Por ejemplo:
A -> B -> C -> D -> E -> HEAD
Quiero hacer el equivalente de:
git revert B-D
donde el resultado sería:
A -> B -> C -> D -> E -> F -> HEAD
donde F contiene el reverso de BD inclusive.
Respuestas:
¿Qué versión de Git estás usando?
Para revertir múltiples confirmaciones solo se admite en Git1.7.2 +: consulte " Revertir a una confirmación anterior usando revertir varias veces " para obtener más detalles.
La
git revert
página de manual actual es solo para la versión actual de Git (1.7.4+).Como el OP Alex Spurling informa en los comentarios:
La actualización a 1.7.4 funciona bien.
Para responder a mi propia pregunta, esta es la sintaxis que estaba buscando:
B^
significa "la primera confirmación principal de B": que permite incluirB
en la reversión.Consulte la
git rev-parse
sección " ESPECIFICAR REVISIONES " que incluye<rev>^
, por ejemplo, laHEAD^
sintaxis: ver más en " ¿Qué significa el carácter caret (^
)? ")Tenga en cuenta que cada confirmación revertida se confirma por separado.
Henrik N aclara en los comentarios :
Como se muestra a continuación, puede revertir sin comprometerse de inmediato:
fuente
git revert OLDER_COMMIT^..NEWER_COMMIT
^
para un parámetro de revisión significa el primer padre de ese objeto de compromiso".Si desea revertir el rango de confirmación B a D (al menos en la versión 2 de git) en una sola confirmación, puede hacerlo
Esto revierte los cambios realizados por los commits del commit padre de B (excluido) al commit D (incluido), pero no crea ningún commit con los cambios revertidos. La reversión solo modifica el árbol de trabajo y el índice.
No olvides confirmar los cambios después
También puede revertir múltiples confirmaciones no relacionadas en una única confirmación, utilizando el mismo método. por ejemplo para revertir B y D pero no C
Referencia: https://www.kernel.org/pub/software/scm/git/docs/git-revert.html
Gracias Honza Haering por la corrección.
fuente
git revert -n B..D
no revierte el commit B, solo C y D.git revert -n B^..D
revierte B también.git revert -n master~5..master~2
dice el quinto último compromiso incluido. Pero enmaster~5
realidad es el sexto último commit. Vea la selección de revisión en git docs para obtener información detallada sobre la..
notación :-)Hacer
git revert OLDER_COMMIT^..NEWER_COMMIT
no funcionó para mí.Solía
git revert -n OLDER_COMMIT^..NEWER_COMMIT
y todo está bien. Estoy usando la versión git1.7.9.6
.fuente
-n
o--no-commit
revertirá todos los cambios en todo el rango en una sola confirmación, en lugar de crear una confirmación de reversión para cada confirmación en el rango. El resultado final es el mismo, ya que en, los mismos cambios se revertirán. Solo depende de cómo quieres que se vea tu historial de git.Use
git rebase -i
para aplastar los commits relevantes en uno. Entonces solo tiene un compromiso para revertir.fuente