2013-05-07 29 views
6

Po raz pierwszy użyłem git, chciałem zaimportować istniejący projekt do github i wszystko zostało usunięte. Po wyszukaniu odpowiedzi myślę, że git usunął pliki po ściągnięciu git, próbuję odzyskać pliki i foldery, ale nie mogę tego znaleźć.git usunięte wszystko, jak odzyskać pliki i foldery

Zrobiłem dokładnie obok:

[email protected]:~/Escritorio/Django/Ujixy$ git init 
Initialized empty Git repository in /home/jesus/Escritorio/Django/Ujixy/.git/ 
[email protected]:~/Escritorio/Django/Ujixy$ git add . 
[email protected]:~/Escritorio/Django/Ujixy$ git status 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# (use "git rm --cached <file>..." to unstage) 
# 
# new file: Catalogoapp/__init__.py 
# new file: Catalogoapp/models.py 
# new file: Catalogoapp/tests.py 
# new file: Catalogoapp/views.py 
# new file: Messageapp/__init__.py 
# new file: Messageapp/models.py 
# new file: Messageapp/tests.py 
# new file: Messageapp/views.py 
# new file: Ujixyapp/__init__.py 
[...] 

[email protected]:~/Escritorio/Django/Ujixy$ git push origin master 
fatal: 'origin' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
[email protected]:~/Escritorio/Django/Ujixy$ git add * 
[email protected]:~/Escritorio/Django/Ujixy$ git status 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# (use "git rm --cached <file>..." to unstage) 
# 
# new file: Catalogoapp/__init__.py 
# new file: Catalogoapp/models.py 
# new file: Catalogoapp/tests.py 
# new file: Catalogoapp/views.py 
# new file: Messageapp/__init__.py 
# new file: Messageapp/models.py 
# new file: Messageapp/tests.py 
# new file: Messageapp/views.py 
# new file: Ujixyapp/__init__.py 
[...] 
[email protected]:~/Escritorio/Django/Ujixy$ git remote add origin https://github.com/PEREYO/Ujixy.git 
[email protected]:~/Escritorio/Django/Ujixy$ git pull origin master 
remote: Counting objects: 3, done. 
remote: Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
From https://github.com/PEREYO/Ujixy 
* branch   master  -> FETCH_HEAD 
[email protected]:~/Escritorio/Django/Ujixy$ git push origin master 
Username for 'https://github.com': PEREYO 
Password for 'https://[email protected]': 
Everything up-to-date 
[email protected]:~/Escritorio/Django/Ujixy$ git init 
Reinitialized existing Git repository in /home/jesus/Escritorio/Django/Ujixy/.git/ 
[email protected]:~/Escritorio/Django/Ujixy$ git add * 
[email protected]:~/Escritorio/Django/Ujixy$ git status 
# On branch master 
nothing to commit (working directory clean) 

Teraz próbuję to naprawić robi następny:

[email protected]:~/Escritorio/Ujixy$ git fsck --lost-found 
Checking object directories: 100% (256/256), done. 
dangling tree bfe11a30d57a0233d3b0c840a3b66f6421987304 
[email protected]:~/Escritorio/Ujixy$ git status 
# On branch master 
nothing to commit (working directory clean) 
[email protected]:~/Escritorio/Ujixy$ git reflog 
61daa69 [email protected]{0}: initial pull 

[email protected]:~/Escritorio/Ujixy$ git cat-file -p bfe11a30d57a0233d3b0c840a3b66f6421987304 
040000 tree 9196501a346cfe4347f46d82936745b78b0235b9 Catalogoapp 
040000 tree 49561b4bd6adb8fe8bb1915d6bef09cd49195a97 Messageapp 
040000 tree 0fb58bf9b56397443fb235e2a38045d6df7cd473 Ujixyapp 
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 __init__.py 
100644 blob dfe3388ddf2d5ba34559eb3ec56199d83cdce8bd __init__.pyc 
100644 blob bcdd55e27be9447bf6b224b8ba0cbc6802509862 manage.py 
100644 blob 34c5978d8026844038d530b491828398bc3ea6c7 settings.py 
100644 blob 167a6b1965426ec30c25535fe27338b61b2ae0cf settings.pyc 
100644 blob 4a7215cb90ae95d64ca30fde1c1277e0155eb4ed urls.py 
100644 blob 6eedcddafbc8854f70f44181edac8e63781cfb09 urls.pyc 

Ale Jak mogę odzyskać katalogi z wszystkich plików i folderów ? Teraz pracuję w kopii folderu .git, aby uniknąć kolejnych problemów.

Odpowiedz

9

Jak już masz odniesienie do zwisającego obiektu drzewa, jesteś na dobrej drodze. Poniższy powinno działać: najpierw odzyskać drzewo dangling do indeksu git to:

git read-tree bfe11a30d57a0233d3b0c840a3b66f6421987304 

Następnie zaktualizować swój katalog roboczy od teraz-odzyskanego index:

git checkout-index -a 
+0

Wielkie dzięki, zadziałało. – PEREYO

+0

Uratowałem mój dzień. Dziękuję Ci. – user2085689

+0

Taki sam koleś ... Pozdrawiam! –

-2

Nie wierzę, że uda ci się odzyskać te pliki i foldery, jeśli ich nie popełniłeś. Git może odzyskać wszystko, co powierzyłeś w repozytorium, ale jeśli nie zrobiłeś tego po raz pierwszy, to w ogóle nie jest w repozytorium. Jest to po części powód, dla którego lubię używać git w folderze Dropbox.

2

odkąd stanie uruchomić git cat-file -p na zwisający obiekt drzewa, powinieneś być w stanie go odzyskać. Istnieje wiele sposobów na jej temat będą opiszę 2, że mogę szybko myśleć:

  • utworzyć nowy popełnić przynieść w plikach w drzewie zwisający. To zatwierdzenie nie będzie miało rodzica.

    echo "A commit to recover the dangling tree." | git commit-tree bfe11a30d57a0233d3b0c840a3b66f6421987304 
    
    # Output: 
    <SOME_NEWLY_CREATED_COMMIT_SHA1> 
    

    Nowe zatwierdzenie powinno zawierać drzewo robocze zwisającego drzewa, które właśnie odkryłeś. Dane wyjściowe powyższego polecenia powinny pokazywać nowe zatwierdzenie SHA1, które zostało utworzone.

    Aby przełączyć się bieżącą pracą a drzewo to commit:

    git checkout <SOME_NEWLY_CREATED_COMMIT_SHA1> 
    

    Teraz powinieneś być w stanie zobaczyć wszystkie pliki i treści, które zostały wymienione w zwisające drzewa popełnił. Możesz zajrzeć, zrobić kopię zapasową plików, rób co chcesz;)

  • Alternatywne podejście:

    Jeśli chcesz po prostu zmiany na górze prąd popełnić takie podejście może być przydatne.

    Odczytaj zawartość drzewa do indeksu git (tj. Do obszaru przemieszczania dla tego przypadku).

    git read-tree bfe11a30d57a0233d3b0c840a3b66f6421987304 
    

    teraz zatwierdzić zmiany w obszarze pomostowym na górze aktualnie wyrejestrowany Branża:

    git commit -m "Recover the lost files." 
    

A na przyszłość:

  • Zawsze swoje zmiany , jest o wiele łatwiej dostać się do nich (używając refloga), nawet jeśli zatwierdzenie zwisa w przyszłości. W razie wątpliwości możesz zawsze zatwierdzać zatwierdzenie, wprowadzać zmiany, przepisywać historię itp. Przed uruchomieniem komend, takich jak git pull lub git push, należy wprowadzić zmiany, aby nie zgubić się.

  • Nie uruchamiaj git init dwa razy w repozytorium, chociaż git jest wystarczająco inteligentny, aby wiedzieć, że repozytorium zostało już zainicjowane i stara się NIE nadpisywać zmian.

+0

Dzięki, bardzo przydatne informacje i porady. – PEREYO