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.
Kommentare sind geschlossen.