17. August 2013

Commit-Hashes und Historie

Jeder Commit wird eindeutig identifiziert durch einen Hashwert, der sich aus den Inhalten des Commits berechnet, zum Beispiel:

9a034128a329f4fb7a53043dd1d1e8f74bfc91fc

Diese Hashes dürfen abgekürzt werden. Die ersten 7 Stellen reichen in der Regel aus, um einen Commit eindeutig zu referenzieren, z.B:

9a03412

Neben den Dateiinhalten geht auch das Commit-Datum und die Historie, die zu diesem Commit geführt hat, in die Hash-Berechnung ein. Wird auch nur ein Byte der Projektdateien oder der Historie verändert (z.B. Datenkorruption, Manipulation), fällt dies sofort auf, da git die Dateien im Dateisystem mit dem Hash gegenprüft.

Git verwaltet die Historie des Repositories, indem es zu jedem Commit einen Verweis auf den Parent-Commit ablegt:

Einzelne Commits und deren Änderungen zum Vorgänger-Commit können angezeigt werden mit:

$ git show [--format=<format>] <object>
$ git show 9a03412

Dass git den Hash des Vorgänger-Commits zu einem Commit als parent ablegt und so die Historie des Projektes verwaltet kann mit git show --format=raw sichtbar gemacht werden.

$ git show --format=raw 55623b2
commit 55623b2d71e7cb75b9ae26880988e1dc69ef0aa7
parent 9a034128a329f4fb7a53043dd1d1e8f74bfc91fc

Die Historie kann angezeigt werden mit git log:

$ git log
$ git log --pretty=oneline --abbrev-commit  # Kurzdarstellung
$ git log -p                                # Patches ausgeben

Commits können verglichen werden mit git diff:

$ git diff <commit_from> <commit_to>
$ git diff 9a03412 0b4ab87

Aufgaben

  1. Zeigen Sie die Historie mit git log an.

  2. Zeigen Sie einen der Commits im Repository mit git show an.

  3. Vergleichen Sie zwei Commits mit git diff.