Über „Speicherpunkte für Code" hinaus.
Jede Codebasis hat einen Moment, in dem jemand die falsche Datei löscht, ein funktionierendes Feature kaputt macht oder eine Änderung ausliefert, die nicht hätte rausgehen sollen. Ohne Versionskontrolle bedeutet Wiederherstellung, zu hoffen, dass jemand eine aktuelle Kopie auf seinem Laptop hat. Mit Git ist Wiederherstellung ein Befehl.
git log zeigt jeden Zustand, in dem sich Ihre Codebasis jemals befunden hat — wer was wann und warum geändert hat. git diff ermöglicht den Vergleich zweier beliebiger Zeitpunkte in der Historie, um genau zu sehen, was sich verändert hat. git checkout (oder git restore) ermöglicht es, eine Datei — oder ein ganzes Verzeichnis — aus jedem früheren Commit zurückzuholen. Das sind keine Notfallwerkzeuge, die man lernt, wenn etwas kaputt geht. Es sind tägliche Werkzeuge, die einen schneller machen: den gestrigen Ansatz mit dem heutigen vergleichen, bestätigen, was sich zwischen zwei Deployments geändert hat, eine Funktion wiederherstellen, die man letzte Woche gelöscht hat.
Die Teams, die Git als „speichere einfach meinen Code" behandeln, lassen die mächtigsten Features ungenutzt. Zeitreisen ist keine Metapher — es ist eine buchstäbliche Fähigkeit. Jeder Commit ist ein Snapshot, den man erneut besuchen, mit anderen vergleichen oder wiederherstellen kann. Die einzige Voraussetzung ist, dass man oft genug committet, um nützliche Snapshots zu haben.
Zwei Entwickler, die gleichzeitig dieselbe Datei bearbeiten, ist das älteste Problem bei kollaborativer Softwarearbeit. Vor der Versionskontrolle nutzten Teams Dateisperren („Ich bearbeite config.ts, fass sie nicht an"), geplante Bearbeitungsfenster oder hofften einfach auf das Beste. Alle drei Ansätze brechen bei Skalierung zusammen.
Git löst dies mit Branches. Ein Branch ist eine isolierte Kopie der Codebasis, in der man Änderungen vornehmen kann, ohne die Arbeit anderer zu beeinflussen. Sie schreiben Ihr Feature, Ihr Teamkollege schreibt seins, und keiner von Ihnen sieht den halbfertigen Code des anderen, bis Sie beide bereit sind. Merge ist der Integrationspunkt — der bewusste Moment, in dem zwei Arbeitsströme zusammenkommen und etwaige Konflikte auftauchen.
Es geht nicht nur darum, überschriebene Dateien zu verhindern. Branches geben einem die Erlaubnis zu experimentieren. Man kann ein riskantes Refactoring versuchen, entscheiden, dass es falsch ist, und den Branch löschen — kein Schaden angerichtet, kein Revert nötig, kein Commit-Rauschen in der gemeinsamen Historie. Die Kosten eines gescheiterten Experiments sinken gegen null, was bedeutet, dass Entwickler mehr Dinge ausprobieren. Teams, die gut branchen, liefern schneller aus, weil sie mehr Optionen erkunden, bevor sie sich für eine entscheiden.
Git ist ein vollständiges Prüfprotokoll darüber, wer was wann und — wenn Commits gut geschrieben sind — warum geändert hat. Jede Codezeile in Ihrer Codebasis hat über git blame einen Autor, einen Zeitstempel und eine Commit-Nachricht. Das ist keine Überwachung; es ist Kontext.
Wenn Sie ein verwirrendes Stück Code finden, sagt Ihnen git blame, wer es geschrieben hat und wann. Die zugehörige Commit-Nachricht sagt Ihnen warum. Der zugehörige PR (wenn Ihr Team sie nutzt) gibt Ihnen die vollständige Diskussion, die zu dieser Entscheidung geführt hat. Das ist der Unterschied zwischen „Ich habe keine Ahnung, warum das hier ist" und „Ach so, Sarah hat das im März hinzugefügt, um den Sonderfall zu behandeln, wenn die API null zurückgibt — hier ist das Ticket."
Der Prüfpfad macht auch jede Änderung rückgängig machbar. Ein schlechtes Deployment ist keine Krise — es ist ein git revert von der Wiederherstellung entfernt. Eine gelöschte Datei ist nicht weg — sie existiert in jedem Commit vor der Löschung. Die Kombination aus Zuordnung und Rückgängigmachbarkeit gibt Teams das Vertrauen, schnell zu agieren. Man kann täglich ausliefern, weil Rollbacks günstig sind, und man kann präzise zurückrollen, weil man genau weiß, was sich geändert hat.
Git ist eine Zeitmaschine, kein Backup
Der Punkt ist nicht, Ihren Code zu speichern — das macht Dropbox. Der Punkt ist, jeden Zustand zu navigieren, in dem Ihr Code jemals war, und diese Zustände bewusst zusammenzuführen.