Git’s Patch Mode

Avatar of Robin Rendle
Robin Rendle am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Nehmen wir an, wir haben gerade einige CSS-Änderungen in einer Datei vorgenommen und möchten diese mit Git staged. Sie könnten so etwas tun

git add styles.css

…und dann möchten wir einen Commit mit diesem gestagten Code erstellen

git commit -m "Fixed the CSS"

Ich mache das schon seit langer Zeit, aber diese Methode hat viele Probleme. Erstens, was passiert, wenn Sie mehr als eine Sache in `styles.css` geändert haben? Vielleicht haben wir die Ränder eines Elements geändert und *dann* die Hintergrundfarbe eines Elements geändert, das mit dem ersten völlig nichts zu tun hat. Nun, es wird sehr schwierig sein, die Historie unserer Commits zu verstehen, wenn wir `git log` ausführen.

Hier kommt der Patch-Modus von Git ins Spiel. Es ist ein äußerst hilfreiches Flag, das es uns ermöglicht, Teile einer Datei aufzuteilen, damit wir jeden Teil separat stagend und committen können.

git add -p styles.css

Sobald wir diesen Befehl ausführen, sollten wir so etwas sehen

Wir haben zwei Änderungen an zwei separaten Elementen vorgenommen, aber es gibt alle möglichen Befehle, die wir auf etwas namens „Hunk“ ausführen können. Was wir hier sehen, ist ein Teil des Codes, oder ein Hunk, aber um zu sehen, was all diese Befehle bedeuten, können wir einfach `?` eingeben. Dies listet alle Befehle für uns auf

In diesem Fall sind unsere beiden vorgenommenen Änderungen derzeit Teil desselben Hunches, daher müssen wir sie durch Eingabe von `s` aufteilen.

Jetzt können wir sehen, dass nur die Änderungen an der `.table`-Klasse ausgewählt wurden, was genau das war, was wir wollten. Dann müssen wir nur noch `y` eingeben, um diesen Hunk zu stagend. Git gibt uns jedoch die Möglichkeit, weitere Hunches zu stagend, was nützlich ist, wenn wir ähnliche Änderungen an verschiedenen Teilen des Codes vornehmen. Doch in dieser Situation wollen wir diesen Prozess einfach beenden, also müssen wir `q` ausführen.

Das alles ergibt mehr Sinn, wenn wir `git status` in die Befehlszeile eingeben; wir sehen, dass wir Code aus styles.css hinzugefügt haben, und wenn wir `git diff styles.css` ausführen, sehen wir, dass nur eine Zeile CSS gestaged wurde

Alles, was übrig bleibt, ist der Commit, während wir sicherstellen, dass wir etwas Einprägsames für zukünftige Referenzen schreiben, wie zum Beispiel

git commit -m "fixed the border of the form"

Auf diese Weise können wir unsere Commit-Historie durchgehen und sie alle viel einfacher verstehen.

Juhu für Git’s Patch-Modus!