2011-05-25 20 views
60

Aquí está mi historia para la carpeta 'SomeFolder'Cómo revertir una carpeta a una confirmación en concreto mediante la creación de un parche

$ git log somefolder 

commit 89cd 
More changes to somefolder 

commit ef47a 
Updating somefolder and other stuff 

commit e095 
Bugs fixed in somefolder 

Quiero volver SomeFolder remonta a los errores corregidos en alguna carpeta" comprometerse.

Desde la segunda confirmar los cambios implicados fuera de SomeFolder, no quiero para revertir este cometido.

supongo que la forma más segura sería la creación de un diff/patch entre cometer E095 y 89cd que se aplica sólo para algunos carpeta, y luego aplicar ese parche. ¿Cómo puedo hacer eso?

Respuesta

107

Puede utilizar 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 funcionaría también. Sólo generar el diff para ir de su estado actual de nuevo a e095:

git diff 89cd..e095 -- somefolder 
+17

esto no elimina los archivos que se agregaron en esa confirmación, use 'git reset e095 - alguna/carpeta' en su lugar – shime

9

Puede utilizar git reset para restablecer el índice que también incluirá la eliminación de archivos que se agregaron en cambios más recientes (git checkout por sí mismo no lo hace hacer esto):

git reset e095 -- somefolder 

sin embargo git reset no actualiza la copia de trabajo y la opción --hard no funciona con carpetas. Así que a continuación, utilizar git checkout para hacer copiar el trabajo el mismo que el índice:

git checkout -- somefolder 

y luego si también desea eliminar todos los archivos añadido también necesita TODO:

git clean -fd somefolder 
+0

esta respuesta me funciona cuando el directorio incluye archivos nuevos. – Yahoho

Cuestiones relacionadas