3205 Stimmen

Wie man eine gelöschte Datei in einem Git-Repository findet und wiederherstellt

Angenommen, ich befinde mich in einem Git-Repository. Ich lösche eine Datei und übertrage diese Änderung. Ich arbeite weiter und nehme weitere Übertragungen vor. Dann stelle ich fest, dass ich die Datei wiederherstellen muss.

Ich weiß, dass ich eine Datei auschecken kann mit git checkout HEAD^ foo.bar aber ich weiß nicht genau, wann diese Datei gelöscht wurde.

  1. Wie kann ich am schnellsten den Commit finden, der einen bestimmten Dateinamen gelöscht hat?
  2. Wie kann ich diese Datei am einfachsten wieder in meine Arbeitskopie aufnehmen?

Ich hoffe, dass ich meine Protokolle nicht manuell durchsuchen, das gesamte Projekt für einen bestimmten SHA auschecken und diese Datei dann manuell in meinen ursprünglichen Projekt-Checkout kopieren muss.

43 Stimmen

Beachten Sie, dass der vorangegangene Kommentar die Frage im Titel beantwortet, nicht im Hauptteil - das schließt ein, herauszufinden wenn die Datei wurde gelöscht.

14 Stimmen

So finden Sie die Übertragung, in der eine Datei gelöscht wurde: git log --diff-filter=D -- path/to/file

2 Stimmen

4voto

Tony Wickham Punkte 4506

Wenn Sie den Commit kennen, der die Datei(en) gelöscht hat, führen Sie diesen Befehl aus, wobei <SHA1_deletion> ist der Commit, der die Datei gelöscht hat:

git diff --diff-filter=D --name-only <SHA1_deletion>~1 <SHA1_deletion> | xargs git checkout <SHA1_deletion>~1 --

Der Teil vor der Pipe listet alle Dateien auf, die bei der Übertragung gelöscht wurden; sie werden alle aus der vorherigen Übertragung ausgecheckt, um sie wiederherzustellen.

4voto

Ritesh Adulkar Punkte 741

Probieren Sie aus, wie Sie das am besten machen.


Suchen Sie zunächst die Commit-ID des Commits, der Ihre Datei gelöscht hat. Sie erhalten dann eine Übersicht über die Commits, die Dateien gelöscht haben.

git log --diff-filter=D --summary

git checkout 84sdhfddbdddf~1

Nota: 84sdhfddbddd ist Ihr commit id

Auf diese Weise können Sie alle gelöschten Dateien leicht wiederherstellen.

3voto

Sudhanshu Jain Punkte 2121

Einfach und präzise.

Holen Sie sich zunächst einen aktuellen Stable-Commit, in dem Sie diese Datei haben, indem Sie -

git log 

Angenommen, Sie finden $commitid 1234567..., dann

git checkout <$commitid> $fileName

Dadurch wird die Dateiversion wiederhergestellt, die in dieser Übertragung enthalten war.

3voto

Gerardo Suarez Punkte 312

Dies ist die einfachste Lösung, die ich gefunden habe, wenn Sie nur die gleiche Datei im Master wiederherstellen wollen:

git checkout master -- path/to/File.java

2voto

Dave Baghdanov Punkte 2166

Sie können jederzeit git revert Ihre Übergabe, bei der die Datei gelöscht wurde. ( Dabei wird davon ausgegangen, dass die Löschung die einzige Änderung in der Übertragung war. )

> git log
commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3
Author: Dave <dave@domain.com>
Date:   Thu May 9 11:11:06 2019 -0700

    deleted readme.md

Und wenn Sie die Arbeit fortgesetzt haben und später feststellen, dass Sie die Löschungsübertragung nicht durchführen wollten, können Sie sie mit zurücknehmen:

> git revert 2994bd

Ahora git log zeigt:

> git log
Author: Dave <dave@domain.com>
Date:   Thu May 9 11:17:41 2019 -0700

    Revert "deleted readme"

    This reverts commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3.

Und readme.md wurde im Repository wiederhergestellt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X