Git: Fehler beheben und Commits beheben

Fehler beim Festschreiben ... Wie kann ich das Problem beheben? Ein Durcheinander in der Geschichte der Commits ... Wie kann man alles anständig aussehen lassen? Der Autor des Artikels, dessen Übersetzung wir heute veröffentlichen, sagt, dass er speziell für diejenigen geschrieben wurde, die solche Fragen gestellt haben. Ihm zufolge können Sie, nachdem Sie die hier vorgestellten Techniken für die Arbeit mit Git studiert haben, den Weg der Beherrschung von Git erheblich vorantreiben.


Es wird davon ausgegangen, dass der Leser dieses Artikels bereits mit den Grundlagen von Git vertraut ist. Ist dies nicht der Fall, wird zunächst empfohlen, die Basis zu beherrschen, z. B. mit diesem Material.

Beheben Sie Fehler in Commits


Hier werden verschiedene Szenarien für Fehler bei Commits und deren Korrektur betrachtet.

▍ Szenario Nummer 1


Angenommen, Sie haben viele Dateien festgeschrieben und festgestellt, dass die Festschreibungsnachricht nicht sehr klar war. Danach haben Sie beschlossen, diese Nachricht zu ändern. Verwenden Sie dazu den git commit --amend . Hier ist ein Beispiel für seine Anwendung:

 git commit --amend -m "New commit message" 

▍ Szenario Nummer 2


Angenommen, Sie wollten sechs Dateien festschreiben, haben aber fälschlicherweise nur fünf festgeschrieben. Es scheint, dass Sie diesen Fehler einfach beheben können, indem Sie ein neues Commit erstellen und dort die fehlende sechste Datei hinzufügen.

Dieser Ansatz hat das Recht auf Leben. Um den Commit-Verlauf in einem guten Zustand zu halten, ist es wahrscheinlich viel besser, dem gleichen Commit eine zufällig übersprungene Datei hinzuzufügen. Dies kann wiederum mit dem git commit --amend . Die Verwendung sieht folgendermaßen aus:

 git add file6 git commit --amend --no-edit 

Das Flag --no-edit bedeutet, dass sich die Festschreibungsnachricht nicht ändert.

▍ Szenario Nummer 3


Die Commits in Git sind an den Namen des Autors und seine E-Mail-Adresse gebunden. In der Regel werden diese Daten durch die Erstkonfiguration von Git angezeigt. Infolgedessen kümmern sich diejenigen, die Git verwenden, bei der Ausführung jedes Commits möglicherweise nicht um die Informationen über den Autor.

Darüber hinaus ist es durchaus möglich, dass Sie bei der Arbeit mit einigen Projekten Informationen über den Autor verwenden müssen, z. B. eine E-Mail-Adresse, die sich von den Hauptadressen unterscheidet. Für ein solches Projekt müssen Sie mit diesem Befehl eine E-Mail-Adresse angeben:

 git config user.email "your email id" 

Angenommen, Sie haben dieses Setup vergessen und bereits das erste Commit durchgeführt. Korrigieren Sie die Situation, die uns bereits bekannt ist. Mit dieser Option können Sie die Informationen zum Autor des vorherigen Commits ändern:

 git commit --amend --author "Author Name <Author Email>" 

▍ Hinweis


Verwenden Sie den Befehl " amend nur in Ihrem lokalen Repository. Die Verwendung in Remote-Repositories kann zu enormer Verwirrung führen.

Ordnung in die Geschichte der Commits bringen


Angenommen, Sie arbeiten an einem Code für ein Projekt. Sie wissen, dass es ungefähr zehn Tage dauern wird. Während dieser zehn Tage verpflichten sich andere Entwickler zum Quell-Repository.

Es wird empfohlen, die Synchronisierung zwischen dem lokalen und dem Remote-Repository aufrechtzuerhalten. Dies vermeidet die vielen Zusammenführungskonflikte, die auftreten, wenn Repositorys zu selten zum Synchronisieren sind. Nach dieser Vorgehensweise beschließen Sie, alle zwei Tage Änderungen aus dem Remote-Repository herunterzuladen.

Jedes Mal, wenn Sie Code von einer Remote-Datei in das lokale Repository herunterladen, wird im lokalen Repository ein neues Zusammenführungs-Commit erstellt. Dies bedeutet, dass es in Ihrem lokalen Commit-Verlauf viele solcher Commits gibt, die denjenigen verwirren können, der Ihren Code anzeigt.


Verlauf der Commits im lokalen Repository

Wie räume ich den Commit-Verlauf auf? Um dieses Problem zu lösen, können Sie den git rebase .

▍Git Rebase-Befehl


Betrachten Sie den git rebase als Beispiel.


Commits im Release-Zweig und im Feature-Zweig

Im Release Zweig gibt es drei Commits: Rcommit1 , Rcommit2 und Rcommit3 . Sie haben Ihren Feature Zweig aus dem Release Zweig erstellt, als er nur ein Commit hatte - Rcommit1 . Danach haben Sie dem Feature Zweig zwei Commits hinzugefügt. Dies sind Fcommit1 und Fcommit2 . Ihr Ziel ist es, Commits aus dem Release Zweig in Ihren Feature Zweig hochzuladen. Dazu verwenden Sie den Befehl rebase .

Wir werden die release und feature für die beiden betrachteten Zweige verwenden.

Infolgedessen rebase Verwendung des rebase aus:

 git checkout feature git rebase release 

▍ Funktionen des Rebase-Befehls


Der Befehl rebase verwendet, um sicherzustellen, dass der Feature Zweig frischen Code aus dem Release Zweig enthält.

Bei Anwendung dieses Befehls versucht das System, jedes Commit einzeln zum Feature Zweig hinzuzufügen und auf Konflikte zu prüfen. Wenn dies kompliziert klingt, schauen wir uns die folgende Abbildung an. Dies zeigt die internen Mechanismen des rebase .


Feature-Zweig und drei Schritte des Rebase-Befehls

Schritt 1


Wenn der Befehl aufgerufen wird, zeigt der Feature Zweig auf den Kopf des Release Zweigs. Danach gibt es drei Commits im Feature Zweig: Rcommit1 , Rcommit2 und Rcommit3 . Vielleicht haben Sie hier eine Frage dazu, was mit den Fcommit1 und Fcommit2 passiert ist. Diese Commits sind nicht verschwunden, sie werden in den nächsten Schritten verwendet.

Schritt 2


Git versucht nun, das Fcommit1 Commit zum Feature Zweig hinzuzufügen. Wenn kein Konflikt Fcommit1 , wird Fcommit1 nach Rcommit3 hinzugefügt. Wenn ein Konflikt erkannt wird, meldet Git ihn und Sie müssen diesen Konflikt manuell lösen.

Schritt 3


Nachdem das Commit Fcommit1 zum Feature Zweig hinzugefügt wurde, versucht Git, dort auch Fcommit2 hinzuzufügen. Auch hier wird, wenn keine Konflikte Fcommit2 , Fcommit2 nach Fcommit1 hinzugefügt und der Vorgang erfolgreich abgeschlossen. Wenn ein Konflikt festgestellt wird, wird Git dies wie zuvor melden und anbieten, sich damit zu befassen.

Nach Abschluss des rebase Befehls sehen Sie, dass im Feature Zweig Commits Rcommit1 , Rcommit2 , Rcommit3 , Fcommit1 und Fcommit2 .

▍ Hinweis


Bei der Arbeit mit Git werden sowohl der merge Befehl als auch der rebase Befehl rebase . Dies bedeutet nicht, dass einer von ihnen dem anderen vorzuziehen ist.

Wenn Sie den merge , erhalten Sie ein merge Commit. Wenn Sie rebase , haben Sie keine zusätzlichen rebase .

Es wird empfohlen, diese Befehle in verschiedenen Situationen zu verwenden. rebase eignet sich daher zum Aktualisieren des lokalen Repository-Codes basierend auf dem neuesten Code aus dem Remote-Repository. Verwenden Sie den Befehl merge , um Pull-Anforderungen auszuführen, um den Feature Zweig mit dem Release oder Master Zweig zusammenzuführen.

Zusammenfassung


Nachdem Sie die in diesem Artikel vorgestellten Konzepte studiert haben, haben Sie Ihre Git-Fähigkeiten verbessert und sind dem Niveau eines Git-Experten näher gekommen. Wir hoffen, dass das, was Sie hier gelernt haben, für Sie nützlich ist. Aber die Welt von Git ist riesig. Nachdem Sie etwas Neues gemeistert haben, hören Sie nicht dort auf und gehen Sie weiter.

Liebe Leser! Haben Sie ein Durcheinander bei Git-Commits festgestellt?

Source: https://habr.com/ru/post/de425665/


All Articles