2012-05-15 7 views
6

En un repositorio de git tengo un subdirectorio que quiero restablecer a un estado específico en el pasado (una confirmación anterior). ¿Es posible deshacer todas las confirmaciones de los archivos en un subdirectorio específico? Creo que no hay compromisos que apliquen cambios a los archivos dentro de este subdirectorio y en archivos ubicados en otro lugar al mismo tiempo. Pero sería bueno si fuera posible dejar commits en archivos no afectados que son y no ubicados en este directorio?Restablecer permanentemente el subdirectorio a estado pasado específico

No es necesario que elimine el historial. No sería problema consultar el estado antiguo, eliminar el contenido actual del subdirectorio y copiar y confirmar el estado antiguo en su lugar. Pero eventualmente puede haber una manera más elegante (gitonic).

Respuesta

10

La forma más sencilla de hacerlo es utilizar la capacidad de git checkout para aplicarse en un subdirectorio. A continuación, el escenario y se comprometen:

git checkout <old-SHA1> -- path/to/subdir 
git add -A path/to/subdir 
git commit -m "reverted files in path/to/subdir to what it was at <old-SHA1>" 
+0

Esto no parece funcionar como se esperaba. Los archivos que existen en la revisión actual pero que no están en la revisión anterior no se ven afectados por este comando, mientras que con 'git reset --hard' (aunque' git reset --hard' no se puede usar en subdirectorios). – Ajedi32

1

Si usted se resuelve todas las confirmaciones que desea deshacer, puede utilizar git revert que los respalde - esto sería más útil si había sólo uno o dos confirmaciones que eran los alborotadores

CharlesB's answer es un enfoque más sencillo de realizar si hay muchas confirmaciones, o las confirmaciones tocan otras partes del proyecto (pero se puede trabajar con la bandera -n (no se confirma automáticamente), y solo confirmando los cambios que le interesan)

Cuestiones relacionadas