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!
Toller Beitrag! Ich sehe bereits großartige Einsatzmöglichkeiten. Ich liebe Git!
Dasselbe gilt übrigens auch für Stashing :)
git stash -pSchön! Danke für den Tipp, das wird mir sehr helfen.
So cool
Sehr nützliche Techniken, und es ist schön, sie auf der Kommandozeilenebene beschrieben zu sehen. Funktioniert in Tools wie SourceTree (was ich sehr empfehlen kann!) weitgehend genauso.
Ich stimme der SourceTree-Empfehlung zu. Die semi-grafische Darstellung der Hunches ist sehr leicht verständlich und man kann leicht wählen, welche Hunches man stagend oder verwerfen möchte. Man kann auch die Größe der meisten Hunches ändern (ähnlich dem `s`-Befehl im Beispiel dieses Artikels), indem man das Dropdown-Menü „Anzahl der Kontextzeilen“ direkt über dem Diff-Panel ändert.
Ja, ich habe vor einiger Zeit einen sehr ähnlichen Beitrag veröffentlicht. https://pawelgrzybek.com/git-tip-staging-hunk-of-code-via-command-line/ Nachdem ich das eine Weile gemacht habe, muss ich zugeben, dass ich immer meinen bevorzugten GUI-Git-Client starte, wenn ich einen Commit aufteilen muss – Tower 2 (der derzeit 25% Rabatt hat, einen Blick wert: https://www.git-tower.com/). Danke
Dein Beitrag ist tatsächlich viel klarer :-)
Ich habe früher zu Drittanbieter-Clients wie SourceTree gewechselt, um dies zu tun. Jetzt kann ich es auf der Kommandozeile tun. Großartig!
Ich bin vor ein paar Monaten von der Kommandozeile zu Source Tree gewechselt und habe das vor ein paar Wochen bemerkt. Ich ging davon aus, dass es eine Funktion nur für Source Tree ist.
Alle meine Commits werden schon seit einiger Zeit mit Patch erstellt. Eine weitere großartige Sache ist, dass es Ihnen zeigt, was Sie tatsächlich committen, Sie können Ihre console.log(), übrig gebliebene Kommentare, unordentliche Leerzeichen usw. sehen.
Fantastischer Beitrag!! Macht die Dinge so viel organisierter und abgegrenzter!
Auf Mac macht Gitx das wirklich einfach – es ist leichter als SourceTree und auch Open Source (kein Atlassian-Konto erforderlich!)
Das Original ist tot, aber der gitx-dev Fork ist aktueller.