2016-08-03 5 views
1

Ich bin in einer wirklich schlimmen Situation. Ich habe viele Skripte für ein Projekt geschrieben und sie versehentlich gelöscht.Wiederherstellen von Dateien von früheren Git commit nach git rm

Ich habe 3 Zweige: Master, Dev, App

ich auf dem Dev Zweig entwickeln, eine Arbeitskopie auf Master halten und Anwendungsskripts in App schreiben. Ich habe Dev zum Master verschmolzen und dann Master zu App zusammengeführt. Aber als ich das tat, vergaß ich, dass ich alle meine App-Skripte von Master und Dev gelöscht hatte. Also habe ich blind alle meine Anwendungsskripte in der App gelöscht. Jetzt möchte ich zurückgehen und diese Dateien holen.

Um Früher habe ich ein Commit zurück

git revert HEAD~1 

Ich habe dann versucht

git rm app_* 

die Dateien auf untrack. Aber das löschte sie alle aus meinem Ordner. Und jetzt kann ich sie in keiner Verpflichtung finden. Wie kann ich diese Dateien zurückbekommen?

+0

Sie können versuchen, in die alte Revision zurückzukehren. Verwenden Sie diesen Befehl, um die Revisionen für bestimmte Dateien anzuzeigen> git log --oneline . Mit diesem Befehl> git checkout # oldrevision # können Sie zur alten Revision zurückkehren. –

+0

Es war eine Menge Dateien. Wie 40. Lange Namen. Ich erinnere mich an keine von ihnen. – toshiomagic

+1

können Sie tun >> git log --oneline app_ * –

Antwort

2

Zum Zweig Sie korrigieren möchten.

git checkout App 

Finden Sie die commit vor die Dateien wurden

git log --stat 

, dass SHA und zurückgesetzt zu diesem SHA Speichern gelöscht.

git reset --hard bada55 

Wiederholen Sie für die anderen Zweige. Sie können sehen, was Sie getan haben und die SHA, was mit dem Befehl git reflog passiert ist. Hilft bei der Suche nach Zeitpunkten, die nicht in der aktuellen Zweighistorie enthalten sind.

+0

Vielen Dank !!! Die Stat-Sache ist, wonach ich gesucht habe. Ich schaute auf mein Protokoll und dachte "Ich habe keine Ahnung, wo diese Dateien sind" – toshiomagic

+0

Ja, 'git log' zeigt nur die Commit-Nachricht. 'git log --stat' zeigt die Dateinamen und' git log --patch' zeigt das volle diff. Sie können Logs auch nach Datei/Verzeichnis 'git log - my/path' filtern. Sie können Commit-Nachrichten mit' git log --grep' suchen und Sie können nach Diffs suchen, die mit dem Begriff 'git log -term' übereinstimmen. Sie können all diese auch kombinieren ('git log --stat --patch -SmyFunction --grep Refactor - app/src') – Sukima

0

git checkout [Name der Datei]

oder

git reset Kopf --hard