2012-02-03 28 views
6

Tengo un problema al intentar revertir un archivo a una confirmación anterior, sé que puedo usar git checkout para revertir un solo archivo pero el problema es que tengo cambios en ese archivo que me gustaría conservar, así que me preguntaba cómo hacer algún tipo de "fusión" entre una confirmación previa y la CABEZA actual para un solo archivo? Traté de usar git reset sha-of-my-commit path/to/my/file pero pone la versión anterior en el área de ensayo mientras que la última versión en mi directorio de trabajo no está segura de cómo fusionar ambos archivos después de ella.¿Cómo revertir un archivo a una versión anterior sin sobrescribir los cambios actuales?

Lo que hice por ahora fue solo git diff ..sha-of-my-commit path/to/my/file y simplemente copié/pegué las líneas faltantes, pero creo que debe haber una forma mejor de hacerlo, ¿verdad?

Respuesta

4

Suponiendo que quiere decir que los cambios son en su árbol de trabajo (no comprometidos):

git stash 
git checkout previous-commit path/to/file 
git stash pop 

Si había cometido algunos cambios, entonces todavía puede hacerlo, con un poco más de trabajo. Suponga que su historial se ve así:

- x - A - x - x - x - B - x - x (HEAD) 

donde desea la versión en A, más los cambios de B en. A continuación, haga lo siguiente:

git stash 
git checkout B path/to/file 
git stash 
git checkout A path/to/file 
git stash pop 
git stash pop 

Tenga en cuenta que cualquier aplicación escondite, ya que es una operación Mergey, podría dar lugar a conflictos de fusión; ¡Deberías por supuesto resolverlos antes de continuar!

+0

Gracias! Me olvidé por completo de 'git stash' – javiervd

Cuestiones relacionadas