Zum Inhalt

Git: gelöschte Datei wiederherstellen

Zunächst wird ein leeres Verzeichnis erstellt, um die folgenden Beispiele darstellen zu können. Im Anschluss daran wird in diesem neuen Verzeichnnis ein neues Git Repository erzeugt.

$ mkdir git_test
$ cd git_test/
$ git init
Initialized empty Git repository in c:/Projects/git_test/.git/

Im Anschluss daran werden zwei Textdateien erstellt und mit ein wenig Text befüllt.

$ echo "content of file1" >> file1.txt
$ echo "content of file2" >> file2.txt
$ ls
file1.txt  file2.txt

Danach werden beide Dateien zum Staging Bereich hinzugefügt und zusammen als erster Commit dem Repository hinzugefügt.

$ git add --all
$ git commit -m "first commit"
[master (root-commit) d4ca668] first commit
 2 files changed, 2 insertions(+)
 create mode 100644 file1.txt
 create mode 100644 file2.txt

Nachdem nun beide Dateien im Commit enthalten sind, wird „file1.txt“ gelöscht und „file2.txt“ inhaltlich verändert, so dass danach eine durchaus tägliche Situation im Repository simuliert sein dürfte.

$ rm file1.txt
$ echo "some added content" >> file2.log
$ cat file2.txt
content of file2
some added content
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    file1.txt
#       modified:   file2.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Wenn man nun bemerkt, dass man „file1.txt“ doch benötigt, kann man wie folgt vorgehen, um die Datei wiederherzustellen.

$ git log -- file1.txt
commit d4ca66859d5a9b2d1d91742e126eb35a91dc4f80
Author: Andre Bering <andre@bering.in>
Date:   Sun Oct 20 15:14:04 2013 +0200
 
    first commit
 
$ git checkout d4ca66859d5a9b2d1d91742e126eb35a91dc4f80 -- file1.txt
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   file2.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Hierbei werden zunächst mittels git log -- file1.txt alle Commits ermittelt, in denen die gesuchte Datei enthalten ist. Im Anschluss wird ganz gezielt die fehlende Datei aus dem ermittelten Commit mittels git checkout d4ca66859d5a9b2d1d91742e126eb35a91dc4f80 -- file1.txt ausgecheckt, so dass diese wieder verfügbar ist.

Die noch nicht committeten Änderungen an file2.txt gehen hierbei nicht verloren, da man nur eine Datei in den aktuellen Stand auscheckt.

Published inUncategorized

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.