Deshacer un Git Pull

Las preguntas que he visto para deshacer un git son ligeramente diferentes a las mías.

Esto es lo que hice:

Hay un proyecto en el directory A (no un repository). Inicialicé un repository en él, agregué los files, pero no cometí nada. Luego saqué del repository B, que sobrescribió varios de mis files por etapas.

Tenía la printing de que podía usar el git reset --hard para deshacer la fusión. Por supuesto que acaba de comprobar la CABEZA de las confirmaciones que acababa de sacar.

Debería haber ramificado y comprometido algo antes de hacer esto, la retrospectiva es agradable. ¿Hay alguna forma de recuperar mis viejos files sin grabar?

Parece que hay una respuesta para recuperar los files por etapas aquí:

Recuperando el file agregado después de hacer el reinicio de git –hard HEAD ^

Un git pull es lo mismo que git fetch + git merge . Es el paso de fusión que sobrescribió sus cambios. Para volver al estado anterior a la fusión, use git log para encontrar su última confirmación y luego use git reset --hard 1234abcd donde 1234abcd es el hash de la confirmación deseada.

Tenga en count que después del reinicio, git pull fusionará los cambios nuevamente. Para revertir los cambios para siempre, use git revert que creará una confirmación adicional que invierta los cambios.

Simplemente reinicia el HEAD anterior (es decir, la confirmación que tenías en tu repository, que no se actualizó desde el control remoto), o usa git reflog . Este último muestra una list de acciones que se realizaron en su repository, el command git pull debería ser parte de eso. Simplemente git reset --hard X a un estado anterior a ese command.

O simplemente ramifique el HEAD anterior (puede eliminar / sobrescribir la twig anterior), realice los cambios allí y git tire nuevamente …

Creo que no puedes recuperar completamente ahora. Lo mejor que puedes hacer es git status para verificar qué file (s) aún están intactos. Si los files no confirmados no están aquí, se pierden.

La próxima vez, considere usar git stash antes de git pull o, mejor aún, use git fetch .


SI USTED ES UN USUARIO AVANZADO DE GIT, Y LOS ARCHIVOS SON REALMENTE IMPORTANTES:

Si los files están en etapas, puede extraerlos del repository de objects. Pero estos van directamente a las entrañas, que no creo que debas probar.

Si realmente quieres, lee estos:

Actualización 17 de enero de 2011, 6:53 p.m.

Solo vuelve a leer tu pregunta. Pasé por alto que estaba sacando del proyecto b en lugar de copyr files en su proyecto. No estoy seguro de si mi respuesta aún se mantiene dada su situación. Creo que tu mejor opción es seguir la respuesta de geoffreyd y verificar la respuesta a la pregunta de StackOverflow Recuperar el file agregado después de hacer la restauración de git –hard HEAD ^ .

Respuesta original

Solo haz un git checkout -- <file> .

Aquí está el ejemplo que corrí para confirmar lo anterior …

 # Create a test directory and some test files $ mkdir blah $ echo "I've been overwritten" > test1.txt $ cd blah $ echo "I'm the real test1.txt" > test1.txt $ git init . Initialized empty Git repository in /Users/matthew/blah/.git/ $ git add . $ cp ~/test1.txt . $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: test1.txt # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: test1.txt # $ cat test1.txt I've been overwritten $ git checkout -- test1.txt $ cat test1.txt I'm the real test1.txt 

Cuando ejecutas el git status te dice que uses git checkout -- <file> para descartar cambios en el directory de trabajo. Si estoy leyendo tu pregunta correctamente, eso es lo que quieres hacer.