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
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 RepositoryWie 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-ZweigIm
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-BefehlsSchritt 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?
