2012-04-22 13 views
6

Acabo de crear un nuevo repositorio en github. Comenzando con una carpeta llena de archivos, los pasos que hice fueron:Git pull eliminó cambios no confirmados

git init 
git add -A 
git remote add origin ... 

#Now pull in the first commit that github made 
git pull origin master 

#Check everything is OK 
ls 

Eek! ¡Todos mis archivos han desaparecido! ¿Que pasó? ¿Puedo recuperarlos?

+0

¿Alguna vez cometió y empujar algo? ¿Los commits están en github? – ThiefMaster

+0

@TheifMaster: No. Pensé que debería incluir la confirmación inicial de github, y luego confirmar mis cambios. – Eric

+0

No existe tal cosa como un "compromiso inicial". Un nuevo repositorio no tiene ningún compromiso. – ThiefMaster

Respuesta

10

Puedes recuperarlas. Aunque lo único que apuntaba a ello era el índice, git add aún colocaba el contenido agregado en el repositorio. Comenzaría con un git fsck para encontrar "colgando" (la ortografía un poco estrafalaria de git de "sin referencia") de blobs y git cat-file -p esos blobs, si hay demasiados haría algo como find .git/objects -type f | xargs ls -lt.

+2

'git fsck --lost-found' es probablemente la forma más fácil de avanzar. –

+3

Como podría no ser claro para algunas personas, se hace 'git cat-file -p ' donde el argumento es dado por el comando de salida 'git fsck'. – cdmckay

+1

colgando cat-file fsck esos blobs. hay tantas palabras divertidas en git dam – urmurmur

0

Como nunca ha enviado los archivos, no lo siento. Los pasos que debe seguir son:

git init 
git add . 
git commit -m 'Initial commit' 
git remote add origin ... 
git push origin master 

Recuerde, en caso de duda, consiga siempre. Mientras lo hagas, siempre puedes deshacer cosas con git.

+0

Siempre es un buen consejo comprometerse cuando tenga dudas, pero seguir las instrucciones en la respuesta aceptada le permitirá recuperar archivos no confirmados. –

2

Acepto la respuesta aceptada, sin embargo en mi caso, se encontraron demasiados resultados para git fsck. Esta solución es la que me ayudó a localizar los archivos perdidos:

Buscar una cadena en el archivo que falta (s):

grep -rin <string_in_missing_file> .git/ 

Por ejemplo:

grep -rin MyClassName .git/ 

Resultados de búsqueda:

.git//lost-found/other/3cfaa36226f52a5c1b38c2d2da3912656c998826:5:class MyClassName extends ParentClass 
.git//lost-found/other/e7b8923de4afb230ad523b5b515f50cb9c624248:5:class MyClassName extends ParentClass 

Donde resultados de la búsqueda son:

.git/<path_to_file>:<line_number_of_found_string>:<found_string_and_context> 

continuación para restaurar el archivo:

git cat-file -p 3cfaa36226f52a5c1b38c2d2da3912656c998826 > ../<desired_file_path>/MyClassName.php 
Cuestiones relacionadas