21. November 2013

git log und Recherche im Repository

Ausgabe von Statistiken anhand des Logs:

$ git log --stat           # Änderungsstatistik je Datei
$ git log --shortstat      # n files changed, n insertions(+), n deletions(-)
$ git log --name-status    # Geänderte Dateien auflisten
$ git log -p               # Mit Patch

Logs mit vordefinierter/eigener Formatierung ausgeben:

$ git log --pretty=oneline|short|medium|full|fuller|email|raw
$ git log --pretty=format:'%an commited "%s" (%h) %ar'

Alle Commits eines Autors anzeigen:

$ git log --author=Bob

Alle Commits mit einer bestimmten Commit-Message anzeigen:

$ git log --grep=foo

Alle Commits, die bestimmte Dateien oder Verzeichnisse verändern, anzeigen:

$ git log readme.txt              # Commits, die readme.txt verändern
$ git log src/                    # Commits, die Dateien unter src/ verändern

Wiederherstellen einer einzelnen Datei aus einem bestimmten Commit:

$ git show '<commit>:<file>'             # Anzeigen
$ git reset <commit> -- <file>           # Im Index
$ git checkout <commit> -- <file>        # Im Working Tree

Commits nach Datum anzeigen:

$ git log -5                      # Die letzten 5 commits
$ git log --since="3 days ago"
$ git log --since="2013-01-01" --until="yesterday"

Alle Commits, die den Text 'foo' einer Datei hinzufügen oder entfernen:

$ git log -S'foo'              # In der Historie von HEAD
$ git log --all -S'foo'        # In allen Commits

Grafische Darstellung für Log: Die Parameter von git log entsprechen weitestgehend denen von gitk, z.B.:

$ gitk --since='3 month ago' src/somefile.c

In allen Dateien nach dem Text 'todo' suchen:

$ git grep todo                # Im Working Tree
$ git grep todo master         # Im aktuellen Commit von master
$ git grep -i todo             # Ignore case
$ git grep todo -- '*.c'       # Nur in *.c-Dateien

Anzeigen, welcher Commit/Autor welche Code-Zeile zuletzt geändert hat:

$ git blame readme.txt
$ git gui blame readme.txt

Aufgaben

  1. Lassen Sie sich alle Commits der letzten Stunde ausgeben.
  2. Lassen Sie sich alle Commits ausgeben, die die Datei readme.txt verändert haben.
  3. Lassen Sie eine Übersicht ausgeben, wer mit welchem Commit welche Zeile in der Datei readme.txt zuletzt geändert hat.
  4. Klonen Sie das jQuery-Projekt von der URL git://github.com/jquery/jquery.git.
  5. Finden Sie mittels git grep heraus, in welcher Datei die Funktion ‘isPlainObject’ definiert ist.
  6. Finden Sie mittels git log -S alle Commits, die mit diesem Funktionsnamen zu tun haben:
  7. Finden Sie mittels git blame heraus, welche Commits und Autoren diese Funktion zuletzt bearbeitet haben.