0%

Wozu Versionsverwaltung dient

Eine Momentaufnahme mit Begründung

Mit gespeicherten Dateikopien bekommst du eines: den Stand einer Datei zu einem Zeitpunkt, den du nicht mehr benennen kannst. Eigentlich möchtest du den Zustand der ausgewählten Projektdateien speichern, aufschreiben, warum du ihn gespeichert hast, und jeden gespeicherten Stand behalten.

Gits Antwort auf diesen Wunsch heißt Commit. Es lohnt sich, die Idee kennenzulernen, bevor du die Befehle kennenlernst.

Ein Commit hält zwei Dinge zusammen:

  1. Eine Momentaufnahme der Projektdateien, die du zu einem bestimmten Zeitpunkt aufnehmen möchtest. Sie hält den ausgewählten Projektzustand fest, nicht bloß die eine geänderte Datei.

  2. Eine Nachricht, in der du den Grund aufgeschrieben hast.

Das ist tatsächlich schon das meiste. Fast alles andere in Git dient dazu, Commits zu erstellen, zu lesen oder zwischen ihnen zu wechseln.

Einen Verlauf lesen

So sieht ein kurzer Verlauf aus, wenn du Git bittest, ihn anzuzeigen. Mach dir über das genaue Format keine Gedanken und versuche nicht, dir etwas einzuprägen. Lies ihn einfach.

a3f9c21  Fix the total in the summary table
7b2e880  Add the March figures
1c4d503  Start the quarterly report

Drei Momentaufnahmen, die älteste unten. Jede hat einen kurzen Code als Kennung und die Nachricht ihres Autors.

Vergleiche das mit report-FINAL-actually.txt. Der Verlauf beantwortet die Frage, die der Dateiname nicht beantworten konnte: warum. Jemand hat eine Summe korrigiert. Davor hat jemand den März hinzugefügt. Das Projekt hat eine Geschichte, und diese Geschichte ist aufgeschrieben.

Mit diesen kurzen Codes (a3f9c21 und den anderen) benennt Git jeden Commit. Sie wirken unzugänglich, und du wirst sie fast nie auswendig eintippen. Für den Moment genügt es, zu wissen, dass es sie gibt und dass jeder genau eine Momentaufnahme bezeichnet.

Momentaufnahmen, keine Unterschiede

Hier sollten wir eine naheliegende Annahme prüfen, denn sie bringt Menschen später ins Stolpern.

Du könntest vernünftigerweise vermuten, dass ein Commit speichert, was sich seit dem letzten Mal geändert hat. Das ist eine nachvollziehbare Vermutung, aber das falsche Denkmodell. Ein Commit zeichnet eine vollständige Momentaufnahme des ausgewählten Projektzustands zu diesem Zeitpunkt auf.

Git zeigt dir gern den Unterschied zwischen zwei beliebigen Commits. Das ist eine seiner nützlichsten Funktionen. Diesen Unterschied ermittelt Git aber durch den Vergleich zweier vollständiger Momentaufnahmen. Es setzt eine Datei nicht aus einer Kette von Änderungen zusammen.

Das ist aus einem praktischen Grund wichtig: Deshalb ist die Rückkehr zu einem alten Commit sicher und verlässlich. Du machst nicht einen Stapel von Änderungen rückgängig und hoffst auf das richtige Ergebnis. Du fragst nach einem Foto, das Git bereits hat.

Welche Beschreibung trifft auf einen einzelnen Commit am besten zu?

Warum die Nachricht nicht optional ist

Es ist verlockend, die Nachricht als lästige Formalität zu behandeln. Neue Git-Nutzer schreiben update, fix, stuff, asdf. Das hat jeder schon gemacht.

Das Argument dagegen ist ganz eigennützig: Die Person, die deine Commit-Nachrichten am wahrscheinlichsten liest, bist du selbst, etwa vier Monate später, ohne jede Erinnerung an diese Woche. Die Nachricht ist der einzige Teil eines Commits, der in einer Sprache geschrieben ist, in der du denkst. Die Momentaufnahme kann zeigen, wie der Code aussah. Nur die Nachricht kann erklären, was du erreichen wolltest.

Du musst keine Aufsätze schreiben. Fix the total in the summary table ist eine gute Nachricht: Sie sagt in verständlichen Worten, was sich geändert hat und wo.

Wir kommen darauf zurück, was eine Nachricht nützlich macht, sobald du ein paar geschrieben hast. Merke dir vorerst, dass Git dich jedes einzelne Mal nach einer fragt und dass das Absicht ist.

Als Nächstes sehen wir uns an, was dir ein solcher Verlauf ermöglicht. Die Antwort geht nämlich über „zu einer alten Version zurückkehren“ hinaus.