2013-05-07 13 views
6

Es war das erste Mal, dass ich Git, ich wollte ein vorhandenes Projekt in Github importieren und alles wurde gelöscht. Nach der Suche nach einer Antwort glaube ich, Git gelöscht die Dateien nach Git-Pull, ich versuche, die Dateien und Ordner wiederherzustellen, aber ich kann nicht finden, wie es geht.Git löschte alles, wie man Dateien und Ordner wiederherstellen

Ich tat genau das nächste:

[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 
jes[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) 

nun die nächste ich versuche, es zu beheben tun:

[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 

Aber: Wie kann ich die Verzeichnisse mit allen Dateien und Ordner wiederherstellen ? Jetzt arbeite ich in einer Kopie des GIT-Ordners, um weitere Probleme zu vermeiden.

Antwort

9

Da Sie bereits einen Hinweis auf ein Baumobjekt haben, sind Sie auf dem besten Weg. Die folgenden sollte funktionieren: zuerst den baumelnden Baum in Index Git erholen:

git read-tree bfe11a30d57a0233d3b0c840a3b66f6421987304 

Als Nächstes aktualisieren Sie Ihre Arbeitsverzeichnis aus dem jetzt gewonnene Index:

git checkout-index -a 
+0

Vielen Dank, es hat funktioniert. – PEREYO

+0

Ich habe meinen Tag gerettet. Vielen Dank. – user2085689

+0

Das gleiche hier Kumpel ... Prost! –

-2

Ich glaube nicht, dass Sie diese Dateien und Ordner wiederherstellen können, wenn Sie sie nicht an erster Stelle begangen haben. Git kann alles wiederherstellen, was Sie in den Repo-Vorgang eingegeben haben, aber wenn Sie es gar nicht erst festgelegt haben, liegt es überhaupt nicht im Repo-Bereich. Dies ist teilweise der Grund, warum ich gerne Git innerhalb eines Dropbox-Ordners verwende.

2

Da Sie in der Lage haben git cat-file -p laufen auf das baumelnde Baumobjekt, sollte es möglich sein, es wiederherzustellen. Es gibt viele Möglichkeiten, um darüber, ich werde 2 beschreiben, dass ich schnell denken kann:

  • Erstelle ein neues verpflichten zu bringen, um die Dateien in den baumelnden Baum. Dieses Commit hat keine Eltern.

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

    Das neue Commit sollte den Arbeitsbaum des baumelnden Baumes enthalten, den Sie gerade herausgefunden haben. Die Ausgabe des obigen Befehls sollte das neue Commit SHA1 anzeigen, das erstellt wurde.

    Um Ihre aktuelle Arbeit Baum zu diesem begehen zu wechseln:

    git checkout <SOME_NEWLY_CREATED_COMMIT_SHA1> 
    

    Jetzt sollten Sie in der Lage sein, alle Dateien und den Inhalt zu sehen, begehen im baumelnden Baum aufgeführt wurden. Sie können eine Sicherungskopie der Dateien um, machen sehen, tun, was Sie wollen;)

  • Alternative Ansatz:

    Wenn Sie möchten einfach mal, um die Änderungen auf Ihre aktuellen begehen zu bekommen, diesen Ansatz könnte nützlich sein.

    Lesen Sie den Inhalt des Baums in Git-Index (d. H. In diesem Fall in den Bereitstellungsbereich).

    git read-tree bfe11a30d57a0233d3b0c840a3b66f6421987304 
    

    nun die Änderungen im Staging-Bereich auf dem momentan ausgecheckt Zweig begehen:

    git commit -m "Recover the lost files." 
    

Und für die Zukunft:

  • immer Ihre Änderungen Es ist viel einfacher, zu ihnen zu gelangen (Reflogs verwenden), selbst wenn das Commit in der Zukunft hängen bleibt. Wenn Sie im Zweifelsfall mit einem git commit fortfahren, können Sie das Commit jederzeit ändern, Änderungen vornehmen, den Verlauf umschreiben usw. Vor dem Ausführen von Befehlen wie git pull oder git push sollten Sie Ihre Änderungen vornehmen, damit sie nicht verloren gehen.

  • Führen Sie git init nicht zweimal in einem Repository aus, obwohl git intelligent genug ist, um zu wissen, dass der Repo bereits initialisiert wurde und versucht, Ihre Änderungen NICHT zu überschreiben.

+0

Danke, sehr nützlich Ihre Informationen und Ihre Ratschläge. – PEREYO