Git: Rückgängigmachen, Historie und Branches
Versionsverwaltung ist ein Speicherpunkt, der nie vergisst, warum es ihn gibt. Sie lässt dich eine Änderung Wochen später zurücknehmen und beantwortet die Frage, mit der jede Fehlersuche beginnt: Welche Änderung hat das kaputt gemacht?
Du hast eine Zeile geändert. Eine Zeile. Und jetzt ist die ganze Seite kaputt: Die Preise stimmen nicht, die Knöpfe tun nichts, und du weißt nicht mehr, wie diese Zeile vorher aussah. Das ist der häufigste Moment beim Programmieren überhaupt, und er hat eine richtige Antwort. Es ist kein besseres Gedächtnis und es ist nicht Strg+Z. Es ist Versionsverwaltung.
Die einfache Form des Rückgängigmachens ist Strg+Z. Sie hält etwa eine Minute, dann ist sie aufgebraucht: Du schließt den Editor, oder du speicherst über die Datei, oder du machst einfach weiter, und die Rückgängig-Historie ist weg. Außerdem hast du irgendwann bestimmt Kopien angelegt. Seien wir ehrlich, wie die aussehen: seite-final.zip, seite-final-2.zip, seite-final-echt.zip. Kopien erklären nichts. Eine Versionsverwaltung zeichnet jede Änderung zusammen damit auf, wer sie gemacht hat, wann, und was damit erreicht werden sollte. Wochen später kannst du noch genau fragen, was in dieser Zeile stand und warum sie geändert wurde.
Ein Commit ist eine Momentaufnahme des ganzen Projekts, gespeichert zusammen mit einer kurzen Nachricht. Er ist kein Unterschied und keine Kopie einer einzelnen Datei: Er ist der Zustand von allem in diesem Moment. Jeder Commit zeigt auf den Commit davor, deshalb bilden die Commits eine Kette — genau das meint man mit der Historie eines Projekts.
9f1c2ab
|
a17d3e0
|
64b8f21
|
(start)
$ git diff 64b8f21 a17d3e0
--- a/cart.js
+++ b/cart.js
- return net;
+ return net * (1 + VAT);Ein Branch ist eine eigene Linie der Historie, die von der aktuellen abzweigt. Der Punkt ist, dass er billig ist: Er ist in einem Moment angelegt und kostet fast nichts, also kannst du eine Idee ausprobieren, ohne die funktionierende Seite darauf zu verwetten. Klappt die Idee, führst du den Branch in die Hauptlinie zurück. Klappt sie nicht, wirfst du den Branch weg, und nichts, was funktioniert hat, ist anders geworden. Im Team ist das die Art, wie mehrere Leute gleichzeitig arbeiten, ohne sich zu stören: Jeder hat seine eigene Linie, und die Hauptlinie bleibt in einem Zustand, den man ausliefern kann.
Ein Merge-Konflikt entsteht, wenn zwei Branches dieselben Zeilen geändert haben. Git weigert sich zu raten und schreibt beide Versionen in die Datei, getrennt durch Markierungen:
<<<<<<< HEAD
price = 19.00
=======
price = 21.00
>>>>>>> experimentPraxis
Bringe den ehrlichen Weg von „das ist kaputt“ zurück zu „das ist repariert“ in die richtige Reihenfolge.
Hinweise
- Du kannst nicht zurücknehmen, was nie aufgezeichnet wurde, deshalb beginnt alles mit dem Speichern.
- Die Nutzer bekommen zuerst eine laufende Seite; die richtige Reparatur zu schreiben und den anderen davon zu erzählen kommt danach.
15 XP
Ordne jedem Alltagsproblem das zu, was es wirklich löst.
Hinweise
- Ein Branch hilft nur, wenn die Hauptlinie währenddessen weiterläuft — genau dafür hat man zwei Linien.
- Ein Konflikt ist Information: Er sagt dir, dass zwei Leute dieselbe Zeile berührt haben, und nur ein Mensch kann entscheiden, welche Version richtig ist.
13 XP
Du willst gerade eine Änderung speichern. Welche Commit-Nachricht hilft wirklich jemandem, der die Historie in drei Monaten liest?
Hinweise
- Frag dich, was die nächste Person braucht, um diese Änderung zu verstehen, ohne den Code zu öffnen.
- Eine nützliche Nachricht sagt, was sich geändert hat und warum; wie es gemacht wurde, zeigt der Code schon.
14 XP