So bereinigen Sie den Verlauf Ihrer Commits in Git

Wir veröffentlichen eine Übersetzung des Artikels, den wir auf hackernoon.com gefunden haben. Sein Autor, Thiago Miranda, schreibt darüber, wie man die Arbeit mit Git bequemer und effizienter gestalten kann.



Über einige äußerst nützliche Befehle in Git


Im letzten Monat habe ich Paarprogrammierung durchgeführt und mehrere hundert Commits in Git erstellt. In dem Artikel werde ich das Wichtigste von dem teilen, was ich in dieser Zeit gelernt habe: Ich werde über die Arbeit mit der Geschichte von Commits sprechen, über erfolgreiche Techniken und wie man sie mit einem Dutzend Teams implementiert.

1. Was ist die Geschichte in Git?




Ein genaues Register aller Commits mit Änderungen an Dateien. Darin können Sie bestimmte Änderungen und die Zeit verfolgen, zu der sie vorgenommen wurden, oder die aktuelle Version mit der vorherigen vergleichen. Wo kann man die Geschichte sehen? Geben Sie den Befehl über Git Bash ein:

git log --oneline

Wenn Sie zu viele Commits haben, können Sie mit den Pfeiltasten oder den Bild-auf / Bild-ab-Tasten von einem Kommentar zum anderen wechseln - genau wie in jeder anderen Datei. Drücken Sie zum Beenden die Tastenkombination (q).

2. Über Kommentare zu Commits


Schreiben Sie keine bedeutungslosen Kommentare, sie sollten präzise sein und keiner Erklärung bedürfen. Ihre Aufgabe ist es anzugeben, welche Änderungen Sie am Code vorgenommen haben und welche Auswirkungen sie haben.

  • Wie nicht: "Fixed index.html"
  • Gewusst wie: "Geschwindigkeit der Navigationsleiste verbessert"

Mal sehen, wofür das ist.
Stellen Sie sich vor, Sie arbeiten an einem so großen Projekt, dass die meisten der darin beschäftigten Spezialisten es nicht einmal wissen. Sie entwickeln eine neue Funktion, testen sie an Ihren Geräten und alles funktioniert einwandfrei.

Aber nach einem Push funktioniert plötzlich alles nicht mehr und das erste, was Sie überprüfen, sind die Änderungen, die während der Entwicklung dieser Funktion vorgenommen wurden. Im Git-Protokoll finden Sie viele Commits mit Kommentaren im "festen" Stil. Stellen Sie sich vor, wie viel Zeit Sie aufwenden müssen, um die richtige zu finden!

3. Machen Sie immer Commits


Commits, Commits und erneut Commits. Die Funktion wurde beendet - ein Commit hinzufügen, den Stil eines Blockelements verbessern - ein Commit hinzufügen und so weiter. Idealerweise sollten Sie bei jeder Änderung ein Commit senden.

Vielleicht denken Sie: Warum gibt es so viele Commits? Der Hauptgrund ist, dass Ihre neue Funktionalität möglicherweise mit dem Code einer anderen Person in Konflikt steht. Wenn Sie jedoch immer kleine Änderungen vornehmen, ist es einfacher, diese zu finden und zu beheben. Dies spart Ihnen Zeit, indem Sie Dutzende oder Hunderte von Zeilen verfolgen, die im selben Commit geändert wurden.

4. Korrigieren Sie den letzten Kommentar zum Commit


Was ist, wenn Sie nach dem Hinzufügen eines kleinen Commits zu Ihrem lokalen Repository den Tippfehler korrigieren oder das Commit detaillierter kommentieren möchten? Das Vornehmen von Änderungen ist mit dem folgenden Befehl ziemlich einfach:

git commit -m “correct message” --amend

Bitte beachten Sie: Wenn Sie bereits mit dem Festschreiben eines Remote-Repositorys begonnen haben, ist es besser, diesen Befehl nicht zu verwenden.

Einzelheiten finden Sie in der offiziellen Dokumentation .

5. Kombinieren Sie die letzten X-Commits zu einem


Situation: Wenn Sie ein Commit an eine neue Funktion senden, verstehen Sie, dass Sie noch eine kleine Änderung benötigen, minimale Änderungen vornehmen und erneut ein Commit durchführen müssen. Infolgedessen sind 5 Commits ungefähr dasselbe. Es passierte? Solche Commits werden aus der allgemeinen Ansicht Ihrer Geschichte in Git entfernt, aber wenn Sie möchten, können sie einfach mit dem folgenden Befehl behoben werden:

git reset HEAD~3

Mit dem Befehl HEAD ~ 3 werden 3 Top-Commits zurückgesetzt, einschließlich des letzten. In diesem Beispiel werden Ihre letzten drei Commits aus dem Protokoll gelöscht, die Änderungen im Code bleiben jedoch erhalten. Jetzt ist es Zeit zu sehen, welchen Code Sie festschreiben müssen. Dazu geben wir den folgenden Befehl ein:

git stage --diff

Sie werden sehen, dass alle Änderungen an den Commits, die Sie aus dem Verlauf entfernt haben, jetzt indiziert sind, sodass Sie sie erneut festschreiben können, diesmal auf einmal.

Beachten Sie, dass sich HEAD normalerweise auf das zuletzt hinzugefügte Commit bezieht. Wenn Sie sich nicht sicher sind, überprüfen Sie das Git-Protokoll. Wenn Ihr letztes Commit eingefroren wurde (nicht der häufigste Fall), löscht der Befehl HEAD ~ 1 alle Commits aus dem eingefrorenen Zweig. Weitere Informationen finden Sie in der Dokumentation.

6. Löschen Sie das letzte Commit mit Änderungen


Seien Sie vorsichtig, da diese Methode alle Änderungen löscht, ohne dass ein Rollback möglich ist. Es wird normalerweise nach dem Experimentieren mit Code verwendet, wenn das Ergebnis nicht den Erwartungen entspricht. Ich empfehle, dass Sie es zuerst im Sandbox-Repository versuchen.

git reset –-hard HEAD~1

Jetzt wurden Ihr letztes Commit sowie alle relevanten Änderungen im Code gelöscht.

7. Löschen Sie Ihren Commit-Verlauf


Der effizienteste Weg, um den Commit-Verlauf zu löschen, ist die Verwendung des Befehls rebase. Seien Sie vorsichtig: Sie können ein Commit löschen, indem Sie versehentlich die falsche Taste drücken. Lassen Sie uns Rebase interaktiv (Flag -i) mit dem folgenden Befehl ausführen:

git rebase -i HEAD~5



Sobald Sie es eingeben, sehen Sie eine Liste der letzten 5 Commits (HEAD ~ 5) im Terminal. Alle Commits sind nach Datum sortiert, d. H. Das oberste ist das neueste (diese Liste wird mit Vim geöffnet, dem Standard-Git-Texteditor, mit dem Textdateien im Terminal bearbeitet werden können). Und hier ist eine kurze Anleitung mit mehreren nützlichen Befehlen. In den meisten Fällen benötigen Sie die Befehle squash und reword.

Durch Ersetzen des Befehls pick durch den Befehl squash wird dieses Commit aus dem Protokoll entfernt, und alle Änderungen im Code werden mit dem letzten Commit gruppiert, das durch den Befehl pick hervorgehoben wurde.

Wenn Sie den Kommentar anpassen möchten, können Sie den Befehl pick durch den Befehl reword ersetzen und den Kommentar neu schreiben.

Jetzt können Sie zum nächsten Fenster gehen, in dem Sie einen Kommentar für die Gruppe von Commits schreiben müssen, die Sie mit Squash kleben möchten. Um fortzufahren, drücken Sie ESC und geben Sie Folgendes ein:

:wq!

Ein Doppelpunkt wird (:)benötigt, um anzugeben, dass Sie den Befehl übertragen, (w)die Änderungen schreiben (speichern), (q)beenden und (!)den Befehl ausführen möchten .

Bitte beachten Sie, dass jede Commit-Gruppe Ihren Kommentar erhält. Das Ergebnis kann im Git-Protokoll überprüft werden.

Wenn Sie dieses Fenster aus irgendeinem Grund verlassen, ohne den Vorgang abzuschließen, können Sie jederzeit mit dem folgenden Befehl zurückkehren:

git rebase --edit

Wenn Sie das Fenster verlassen möchten, ohne die Änderungen zu speichern, drücken Sie die ESC-Taste und geben Sie Folgendes ein:

:q!

Vim erhält einen Befehl zum Schließen der Datei ohne Speichern.

8. Indizierung verwalten


Normalerweise sollten Sie Commits an eine einzelne Datei oder an eine Gruppe verwandter Dateien senden. Aber wie kann man dann schnell Änderungen während der Indizierung vornehmen?

Angenommen, Sie haben 3 Dateien, von denen nur 2 festgeschrieben werden müssen. In diesem Fall können Sie den folgenden Befehl ausführen:

git add .

Löschen Sie nun die nicht benötigte Datei aus der Indizierung:

git reset -- Readme.txt

Und überprüfen Sie das Ergebnis:

git status

Fügen Sie alle Dateien einer Erweiterung hinzu, z. B. CSS:

git add *.css

Alles versehentlich hinzugefügt? Löschen Sie dann den Index mit dem folgenden Befehl:

git reset --

Wenn Sie komplexere Vorgänge benötigen, können Sie dem Index im Dialogmodus Dateien hinzufügen:

git add -i

Wählen Sie zunächst eine Option aus, indem Sie die entsprechende Nummer eingeben, z. B. (3), um Ihre Aktionen zurückzusetzen.

Durch Auswahl einer Option können Sie eine Liste von Dateien eingeben, die Sie nacheinander aus der Indizierung entfernen möchten.

Wenn Sie fertig sind, drücken Sie die Eingabetaste.

Dateien werden auf die gleiche Weise hinzugefügt. Fügen Sie mit Option (4) eine nicht verfolgte Datei hinzu.

Rufen Sie zum Beenden das (q)Optionsmenü auf.

9. Fazit


Bevor Sie in ein Remote-Repository wechseln und insbesondere Ihren Zweig zusammenführen, müssen Sie vor allem sicherstellen, dass Sie den Commit-Verlauf aufräumen. Sobald Sie alles in ein Remote-Repository verschoben haben, kann nichts mehr repariert werden.

Möchten Sie mehr über die Paarprogrammierung erfahren und remote loslegen? Schauen Sie sich Microverse.org an .

All Articles