In früheren Artikeln ging es um die Themen „Rückgängigmachen eines Commit in Git“ (ein PowerShell-Git-Tutorial) und „Mergen in Git: Tutorial zu Remote- und lokalen Git-Repositorys“. Sie können Git auch zum Erstellen von Branches in Ihrem Projekt verwenden. Mit Git-Branching können mehrere Entwickler an einem Projekt arbeiten, indem sie die funktionierende Codebasis ändern.
In diesem Artikel erfahren Sie mehr über Git-Branching, über verschiedene Möglichkeiten zum Erstellen von Branches und wie sich diese Branches mit einem lokalen oder Remote-Repository zusammenführen lassen.
Um diesem Git-Tutorial zu folgen und zu lernen, wie man Branches erstellt, benötigen Sie Folgendes:
Mithilfe von Git-Branching können Entwickler eine Abzweigung von der Produktionsversion des Codes erstellen, um Fehler zu beheben oder Funktionen hinzuzufügen. Entwickler erstellen Branches, um mit einer Kopie des Codes zu arbeiten, ohne die bestehende Version zu verändern. Sie erstellen Branches, um Ihre Code-Änderungen zu isolieren, die Sie testen, bevor Sie sie in den main-Branch zusammenführen (mehr dazu später).
Der main-Branch ist an sich nichts Besonderes. Es ist der erste Branch, der erstellt wird, wenn du ein Git-Repository mit dem Befehl git init
initialisierst.
Wenn man einen Commit erstellt, kennzeichnet Git diese Momentaufnahme von Dateien mit einem eindeutigen SHA-1-Hash. Wenn man einen Branch erstellt, erzeugt Git zuerst einen neuen Zeiger auf denselben Commit, auf dem sich der main-Branch gerade befindet. Das Diagramm unten zeigt, dass beide Branches zu diesem Zeitpunkt die gleiche Code-Momentaufnahme haben.
Wenn man Commits im neuen Branch erstellt, erzeugt Git neue Zeiger, um die Änderungen zu verfolgen. Die neuesten Commits liegen jetzt vor den Commits des main-Branch. Während Sie weitere Commits vornehmen, zeichnet jeder Branch seine eigene Version der Dateien auf.
Git weiß dank eines speziellen Zeigers namens „HEAD“, welchen Branch Sie ausgecheckt haben. Wenn Sie einen neuen Branch erstellen, ändert Git den HEAD-Zeiger nicht sofort auf den neuen Branch. Im Tutorial können Sie den HEAD-Zeiger sehen, wenn Sie Branches erstellen und das Commit-Protokoll ansehen.
Diese Branching-Funktion ist eines der Features, die Git besonders leistungsfähig machen. Mehrere Personen erstellen separate Branches, um an ihrem Code zu arbeiten, und mergen dann ihre Änderungen in den main-Branch. Branches sollen temporär sein und sollten nach Abschluss der Arbeit gelöscht werden.
Branch-Namen können beliebig gewählt werden. Möglicherweise hat Ihre Organisation oder Ihr Projekt jedoch bestimmte Standards für die Benennung von Branches vorgesehen. Beispielsweise kann der Branch nach der Person benannt werden, die für die Arbeit am Branch verantwortlich ist, sowie nach einer Beschreibung oder einem bestimmten Arbeitselement:
Über den Namen eines Branch kann man auch seine Funktion angeben, etwa ein Feature, ein Bugfix oder ein Hotfix:
Eine andere Branching-Strategie besteht darin, Branches zu haben, die den verschiedenen Entwicklungszyklen gewidmet sind, beispielsweise Feature oder Hotfix. Wenn Arbeitselemente hinzukommen, erstellen Sie einen Branch für das jeweilige Element aus dem entsprechenden Branch. Ja, man kann auch Branches aus Branches erstellen! Ein Beispiel dafür finden Sie weiter unten in Option 4.
Genug der Theorie, jetzt wird gebrancht! In diesen Beispielen nutzen wir PowerShell 7 auf Windows 10. Sie können jedoch jedes Terminal verwenden, das Git-Befehle unterstützt.
Um einen Zweig zu erstellen, verwenden Sie den Befehl git branch
gefolgt von dem Namen des Zweigs. Nachdem Sie den Zweig erstellt haben, verwenden Sie erneutgit branch
, um die verfügbaren Zweige anzuzeigen.
Beachten Sie, dass nicht immer automatisch zu dem neuen Branch gewechselt wird, wenn er so erstellt wird. Git verwendet ein Sternchen und eine andersfarbige Schrift, um anzuzeigen, welcher Branch aktiv ist. Diese Darstellung steht für den HEAD-Zeiger, der anzeigt, welcher Branch aktiv ist.
git branch <branch name> git branch
Wenn du einen Branch erstellen und den Branch gleichzeitig abschließen möchtest, verwende den Befehl git checkout
. Der Switch -b gibt den Namen des Branch an. Beachten Sie, dass Git HEAD nach Abschluss des Befehls auf den neuen Branch verschoben hat.
git checkout -b <branch name> git branch
Sie können einen Branch aus einem vorherigen Commit in einem bestehenden Branch erstellen. Denken Sie daran, dass ein Commit nur eine Momentaufnahme der Dateien in einem Repository ist. Sie können einen Branch aus einem Commit erstellen, wenn Sie an einer bestimmten Momentaufnahme der Dateien arbeiten wollen.
Bevor Sie den Branch erstellen, benötigen Sie die SHA-1-Identifikation des Commits. Um die Kennung zu finden, verwenden Sie den Befehl git log
, um frühere Übertragungen anzuzeigen. Jeder Commit hat einen vollständigen SHA-1-Hash als Identifikation. Sie benötigen jedoch nur die ersten paar Zeichen, um den Commit zu identifizieren.
Als Nächstes verwenden Sie denselben git branch
Befehl wie in Option 1, fügen aber die Commit-Kennung am Ende an. In diesem Beispiel wird 40b4d7 aus dem zweiten Commit als Identifikation verwendet.
Beachten Sie, dass der HEAD-Zeiger auf dem main-Branch steht, der der aktive Branch ist. Die anderen Branches jeff/feature1 und jeff/feature2 zeigen auf denselben Commit, auf den sie gezeigt haben, als sie erstellt wurden. Beide zeigen auf dieselbe Momentaufnahme, da an beiden Branches seit der Erstellung keine zusätzlichen Commits vorgenommen wurden.
git log git branch <branch name> <identifier>
Wenn Sie Branches verwenden, die für Hotfixes oder Features vorgesehen sind, erstellen Sie Branches aus diesen anderen Branches, um an der Aufgabe zu arbeiten. Das Erstellen eines Branch aus einem anderen Branch unterscheidet sich nicht von der Erstellung aus dem main-Branch. Sie müssen nur den Namen des anderen Branch als Startpunkt angeben. Dieses Beispiel zeigt die Erstellung des Branch feature4 aus dem develop-Branch.
git checkout -b feature4 develop
Sie haben eine lokale Kopie eines Repositorys, mit der Sie arbeiten können, und andere Entwickler haben ebenfalls eine solche Kopie. Diese Entwickler werden Branches haben, an denen sie arbeiten, und sie können ihre Branches in ein Remote-Repository pushen.
Im Laufe des Prozesses kann es vorkommen, dass Sie an einem anderen Branch arbeiten müssen, der nicht lokal auf Ihrem System vorhanden ist. Sie können bestimmte Branches aus einem Remote-Repository pullen oder herunterladen, um sie auf Ihrem System zu verwenden.
In einem zentralen Repository, das in GitHub gehostet wird, sind die verfügbaren Branches die gleichen wie in einem lokalen System (main, feature1, feature2, and hotfix1). Eine andere Entwicklerin namens Maggie hat jedoch einen Branch für hotfix2, der sich nicht auf dem lokalen System befindet. Maggie bittet Sie, an einem Hotfix zu arbeiten, daher müssen Sie diesen Branch auf Ihr System herunterladen.
Um den Zweig aus dem entfernten Repository abzurufen, verwenden Sie git pull
gegen den Ursprung und geben Sie den Namen des Zweigs an. Wenn Sie verfügbare lokale Branches überprüfen, sehen Sie, dass der neue Branch nicht automatisch angezeigt wird. Sie können jedoch den Branch auschecken und mit der Arbeit an diesem neuen Branch beginnen.
git pull origin <branch name> git branch git checkout <branch name> git branch
Sobald Sie die Arbeit an Ihrem Branch abgeschlossen haben, ist es an der Zeit, ihn mit dem main-Branch zusammenzuführen. Durch den Merge-Befehl werden Ihre Branch-Änderungen in den main-Branch implementiert. Je nach Commit-Verlauf führt Git Merges auf zwei Arten durch: Fast-Forward-Merge und Three-Way-Merge. Schauen wir uns nun diese beiden Methoden anhand der Branches und des Commit-Verlaufs im folgenden Diagramm an.
Wenn Sie den Branch hotfix in den main-Branch mergen, schiebt Git den Zeiger des main-Branch vor auf commit nr7jk. Das geschieht, weil der hotfix-Branch einen direkten Vorgänger-Commit mit dem main-Branch teilt und direkt vor dessen Commit liegt. Dieser Commit ist ein Fast-Forward-Merge.
Sobald Sie den hotfix-Branch gemergt haben, arbeiten Sie an dem Branch feature1 weiter. Wenn Sie weiterhin Commits auf dem feature1-Branch vornehmen, zweigt sich der der Commit-Verlauf ab.
Git ist nicht in der Lage, den Zeiger auf den letzten Commit zu verschieben, wie bei einem Fast-Forward-Commit. Um den Branch feature1 in den main-Branch zu bringen, führt Git einen Three-Way-Merge durch. Dabei erstellt Git eine Momentaufnahme von drei verschiedenen Commits, um einen neuen zu erstellen:
Um Branches lokal zusammenzuführen, benutze git checkout
, um zu dem Branch zu wechseln, in den du mergen möchtest. Dieser Branch ist in der Regel der main-Branch. Verwende als Nächstes git merge
und gib den Namen des anderen Branch an, der in diesen Branch übernommen werden soll. In diesem Beispiel wird der Branch jeff/feature1 in den main-Branch gemergt. Beachten Sie, dass dies ein Fast-Forward-Merge ist.
git checkout main git merge jeff/feature1
Die Arbeit am main-Branch und den anderen Branches wird fortgesetzt, so dass diese keinen gemeinsamen Commit-Verlauf mehr haben. Nun möchte ein Entwickler den Branch jeff/feature2 in den main-Branch mergen. Stattdessen führt Git einen Three-Way-Merge-Commit (auch als „rekursiv“ bezeichnet) durch.
git checkout main git merge jeff/feature2
Wenn Sie einen Branch in Ihrem lokalen Repository erstellen, weiß das Remote-Repository nichts von der Existenz des Branch. Bevor Sie den Code des Zweigs im entfernten Repository pushen können, müssen Sie das entfernte Repository mit dem Befehl git push
als Upstream-Zweig festlegen. Dieser Befehl setzt gleichzeitig den Upstream-Branch und pusht den Inhalt des Branch in das Remote-Repository.
git push --set-upstream origin <branch name>
Während Sie an Ihrem Branch arbeiten, können andere Entwickler den main-Branch mit ihrem Branch aktualisieren. Diese Aktion bedeutet, dass Ihr Branch nun nicht mehr auf dem neuesten Stand des main-Branch ist und Inhalte fehlen. Du kannst den Branch main in deinen Branch mergen, indem du dir deinen Branch ansiehst und denselben Befehl git merge
verwendest.
git checkout <branch name> git merge main
Wenn man einen Branch erstellt, wird eine Momentaufnahme des vorhandenen Codes erstellt, damit man unabhängig vom main-Branch daran arbeiten kann.
Verwenden Sie den Befehl „git branch“ und geben Sie den Namen des Branch an, z. B. „git branch feature1“.
Mit „git branch“ können Sie die verfügbaren Branches und den aktiven Branch anzeigen. Git kennzeichnet den aktiven Branch normalerweise mit einem Sternchen und einer andersfarbigen Schrift.
Verwenden Sie „git checkout“ und den Namen des Branch, um ihn zu aktivieren.
Ja, geben Sie den Namen des Branch an, auf dem der neue Branch basiert, z. B. „git branch feature-bug feature1“.
Das geht, indem Sie den Befehl „git push“ verwenden, um den Upstream-Branch festzulegen, z. B.: „git push -set-upstream origin <branch name>“.
Wechseln Sie mit dem Befehl „git checkout“ zum main-Branch und mergen Sie den Branch dann mit dem Befehl „git merge“ und dem Branch-Namen.
Wenn Sie mit einem Branch fertig sind, löschen Sie ihn mit dem Befehl „git branch“ und dem Switch „-d“ – z. B. „git branch -d feature1“.
Das Branching ist ein leistungsstarkes Feature von Git, mit dem Teams unabhängig voneinander am Code arbeiten können. Jeder Entwickler, Systemadministrator oder DevOps-Ingenieur sollte wissen, wie man Branches erstellt, benennt und mergt.