Quiero revertir los cambios realizados por un commit particular a un archivo dado solamente.
¿Puedo usar el comando git revert para eso?
¿Alguna otra forma simple de hacerlo?
git
version-control
revert
Lakshman Prasad
fuente
fuente
Respuestas:
La forma más limpia que he visto de hacer esto se describe aquí.
Similar a la respuesta de VonC pero usando
git show
ygit apply
.fuente
fatal: unrecognized input
-3
bandera para que git solicite la fusión tripartita cuando falla el parche, ya que generalmente estoy corrigiendo un cambio un poco en el tiempo.some_file.c
incluir la ruta al archivo si hay uno; de lo contrario, no parcheará nada en silencio :)Suponiendo que está bien cambiar el historial de confirmación, aquí hay un flujo de trabajo para revertir los cambios en un solo archivo en una confirmación anterior:
Por ejemplo, desea revertir los cambios en 1 archivo (
badfile.txt
) en commitaaa222
:Rebase en la confirmación de la base, corrija la confirmación del problema y continúe.
1) Iniciar rebase interactivo:
2) Marque la confirmación del problema para editar en el editor cambiando
pick
ae
(para editar):3) Revertir los cambios en el archivo incorrecto:
4) Agregue los cambios y modifique la confirmación:
5) Termina el rebase:
fuente
edit
no se mostraban como modificados. Perogit show -- badfile.txt | git apply -R
dieron la respuesta que necesitaba <3git revert
es para todo el contenido del archivo dentro de un commit.Para un solo archivo, puede escribirlo :
(De las utilidades git-shell-scripts de smtlaissezfaire )
Nota:
aquí se describe otra forma si aún no ha confirmado su modificación actual.
git checkout
tiene algunas opciones para un archivo, modificando el archivo desde HEAD, sobrescribiendo su cambio.Dropped.on.Caprica menciona en los comentarios :
fuente
git revert-file <hash> <file-loc>
y revertir ese archivo específico. Levanté esta respuesta (aunque tuve que hacer un par de ediciones para que funcione correctamente). Puede encontrar una copia de mi.gitconfig
script editado aquí: gist.github.com/droppedoncaprica/5b67ec0021371a0ad438Simplemente usaría la
--no-commit
opcióngit-revert
y luego eliminaría los archivos que no desea revertir del índice antes de finalmente confirmarlo. Aquí hay un ejemplo que muestra cómo revertir fácilmente solo los cambios a foo.c en la segunda confirmación más reciente:El primero
git-reset
"desestabiliza" todos los archivos, para que luego podamos volver a agregar solo el archivo que queremos revertir. La finalgit-reset --hard
elimina los reversos de archivos restantes que no queremos conservar.fuente
Mucho más simple:
luego
y entonces
el archivo se ha ido y confirmar hash, mensaje, etc. es lo mismo.
fuente
git checkout -- path/to/file/to/revert
paso? Además, no es cierto que el hash sea el mismo después, ¿verdad? La última oración podría ser mejor como algo así como: "El resultado es que la última confirmación se reemplaza por una nueva que solo difiere en que no contiene los cambios en el archivo revertido".El comando anterior sacará el archivo de la confirmación, pero se reflejará en
git status
.El comando anterior revertirá los cambios (como resultado, obtendrá el mismo archivo que HEAD).
(Pase
--amend
para enmendar el compromiso).Con esto, el archivo que ya está en el commit se elimina y se revierte.
Los pasos anteriores se deben seguir desde la rama donde se realiza la confirmación.
fuente
Puedes seguir este procedimiento:
git revert -n <*commit*>
(-n
revierte todos los cambios pero no los confirma)git add <*filename*>
(nombre de los archivos que desea revertir y confirmar)git commit -m 'reverted message'
(agregue un mensaje para revertir)fuente
Si desea restablecer los cambios en un archivo desde su última confirmación, esto es lo que generalmente uso. Creo que esta es la solución más simple.
Tenga en cuenta que el archivo se agregará al área de preparación.
Espero eso ayude :)
fuente