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.