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?
