Cómo revertir una carpeta a una confirmación en particular creando un parche

97

Aquí está mi historial para la carpeta 'alguna carpeta'

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

Quiero revertir alguna carpeta a la confirmación 'Errores arreglados en alguna carpeta'.

Dado que la segunda confirmación involucró cambios fuera de alguna carpeta, no quiero revertir esta confirmación.

Supongo que la forma más segura sería crear un diff / patch entre commit e095 y 89cd que se aplique solo a alguna carpeta, y luego aplicar ese parche. ¿Cómo puedo hacer eso?

hitfactory
fuente

Respuestas:

155

Puede usar git checkout para actualizar su repositorio a un estado específico.

git checkout e095 -- somefolder

En cuanto a su pregunta sobre la generación de la diferencia, eso también funcionaría. Simplemente genere la diferencia para volver de su estado actual a e095:

git diff 89cd..e095 -- somefolder
jamessan
fuente
30
esto no elimina los archivos que se agregaron en esa confirmación, use git reset e095 -- some/folderen su lugar
shime
2
Desde git 2.22 puede usar --no-overlayfor git checkoutpara que se eliminen los archivos rastreados que no están en la confirmación que está comprobando.
Mariusz Pawelski
53

Puede usar git resetpara restablecer el índice, que también incluirá la eliminación de archivos que se agregaron en confirmaciones más recientes ( git checkoutpor sí solo no hace esto):

git reset e095 -- somefolder

Sin embargo git reset, no actualiza la copia de trabajo y la --hardopción no funciona con carpetas. Entonces use git checkoutpara hacer que la copia de trabajo sea la misma que el índice:

git checkout -- somefolder

y luego, si también desea eliminar los archivos agregados, también debe hacer:

git clean -fd somefolder
Matthew Buckett
fuente
esta respuesta me funciona cuando el directorio incluye archivos nuevos.
Yahoho
2
Esta respuesta es mucho mejor si realmente desea una instantánea limpia del repositorio en ese momento.
princesa de datos
¡Mucho mejor en verdad!
Alexis Pautrot