Quiero revertir un commit particular en git. Desafortunadamente, nuestra organización todavía usa CVS como estándar, por lo que cuando me comprometo con CVS, varios git commits se agrupan en uno. En este caso, me encantaría destacar el git commit original, pero eso es imposible.
¿Existe un enfoque similar al git add --patch
que me permitiría editar selectivamente las diferencias para decidir qué partes de un compromiso revertir?
Respuestas:
Use la opción
--no-commit
(-n
) paragit revert
, luego desestabilizar los cambios, luego usegit add --patch
:Nota: Los archivos que agrega usando git add --patch son los archivos que desea revertir, no los archivos que desea conservar.
fuente
git reset --hard
descartar los otros cambios que no desea revertir.git reset --hard
es peligroso para los novatos, ya que podría perder las ediciones deseadas. En lugar de acostumbrarsegit status
, esto sugieregit checkout -- FILE..
revertir las cosas de manera más segura.git
!git revert
Debería tomar una--patch
discusión.git revert
se utiliza para revertir confirmaciones completas. Puede usargit checkout -p
para seleccionar interactivamente bits para revertir.commit
en primer lugar, ostash
, a continuación, tratarrevert
.He usado lo siguiente con éxito.
Primero revierta el compromiso completo (lo pone en el índice) pero no lo confirme.
Luego, elimine interactivamente los BUENOS cambios revertidos del índice
Luego comete la diferencia inversa de los cambios incorrectos
Finalmente, los BUENOS cambios revertidos (que no han sido organizados por el comando reset) todavía están en el árbol de trabajo. Necesitan ser limpiados. Si no quedan otros cambios no confirmados en el árbol de trabajo, esto puede hacerse
fuente
reset HEAD .
), porque no requiere la limpieza final del directorio de trabajo?reset -p
es más corta que lareset HEAD
seguidaadd -p
. Pero aún requiere la limpieza, ya que los "buenos" trozos que se han restablecido todavía están en el directorio de trabajo después de la confirmación.Personalmente, prefiero esta versión, que reutiliza el mensaje de confirmación generado automáticamente y le da al usuario la oportunidad de editar y pegar la palabra "Parcialmente" antes de finalmente confirmar.
fuente
Solución:
fuente
Otra alternativa (si su versión actual de un archivo no está muy lejos de la versión que está intentando revertir) es obtener el hash de la confirmación inmediatamente antes de la que desea revertir parcialmente (desde
git log
). Entonces su comando se convierte en:Esto cambia los archivos en su árbol de trabajo pero no crea confirmaciones, por lo que si realmente rellena puede comenzar de nuevo
git reset --hard -- file/you/want/to/fix.ext
.fuente
Puede usar git-revert -n, y luego usar add --patch para seleccionar trozos.
fuente