Git-Branching und Merging: Eine Schritt-für-Schritt-Anleitung

IT-Experten

Illustration einer Lupe

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:

Was ist Git-Branching?

Git-Branching Definition

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. Er ist der erste Branch, der erstellt wird, wenn man ein Git-Repository mit dem Befehl git init initialisiert.

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.

Branch-Diagramm 1

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.

Branch-Diagramm 2

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.

Branch-Diagramm HEAD

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.

Benennungsstrategien für Branches

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:

  • benutzername/beschreibung
  • benutzername/arbeitselement

Über den Namen eines Branch kann man auch seine Funktion angeben, etwa ein Feature, ein Bugfix oder ein Hotfix:

  • bugfix/beschreibung
  • feature/feature-name
  • hotfix/beschreibung

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.

So erstellt man einen Branch in Git

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.

Option 1: Einen Branch erstellen

Um einen Branch zu erstellen, verwenden Sie den Befehl git branch, gefolgt vom Namen des Branch. Nachdem Sie den Branch erstellt haben, verwenden Sie erneut git branch, um die verfügbaren Branches 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.

  1. git branch <branch name>
  2. Git Branch

Branch erstellen

Option 2: Einen Branch mithilfe von „Checkout“ erstellen

Wenn Sie einen Branch erstellen und den Branch gleichzeitig auschecken möchten, verwenden Sie 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.

  1. git checkout -b <branch name>
  2. Git Branch

Branch-Checkout erstellen

Option 3: Einen Branch aus einem Commit erstellen

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 Identifikation zu finden, verwenden Sie den Befehl git log, um frühere Commits 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.

Verwenden Sie als Nächstes denselben git branch-Befehl aus Option 1, fügen aber die Commit-Identifikation 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.

  1. git log
  2. git branch <branch name> <identifier>

Branch-Commit erstellen

Option 4: Einen Branch aus einem anderen Branch erstellen

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.

  1. git checkout -b feature4 develop

Option 5: Branch aus Remote-Repository herunterladen

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.

Remote-Branches

Um den Branch aus dem Remote-Repository abzurufen, können Sie git pull gegen den Ursprungsort verwenden und den Namen des Branch angeben. 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.

  1. git pull origin <branch name>
  2. Git Branch
  3. git checkout <branch name>
  4. Git Branch

Git Pull Remote-Branch

Mergen von Branches

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.

Merge-Diagramm 1

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.

Fast-Forward

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.

Abgezweigter Commit-Verlauf

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:

  • dem gemeinsamen Commit, den beide Branches teilen (a90hb)
  • dem letzten Commit des Branch (az84f)
  • dem Commit des Branch, in den gemergt werden soll (nr7jk)

3-Way-Merge-Commit

Mergen von Branches in einem lokalen Repository

Um Branches lokal zu mergen, verwenden Sie git checkout, um zu dem Branch zu wechseln, in den Sie mergen möchten. Dieser Branch ist in der Regel der main-Branch. Verwenden Sie anschließend git merge und geben Sie 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.

  1. git checkout main
  2. git merge jeff/feature1

 

Git FF-Merge

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.

  1. git checkout main
  2. git merge jeff/feature2

Git rekursiver Merge

Mergen von Branches im Remote-Repository

Wenn Sie einen Branch in Ihrem lokalen Repository erstellen, weiß das Remote-Repository nichts von der Existenz des Branch. Bevor Sie den Branch-Code in das Remote-Repository pushen können, müssen Sie das Remote-Repository mithilfe des Befehls git push als Upstream-Branch festlegen. Dieser Befehl setzt gleichzeitig den Upstream-Branch und pusht den Inhalt des Branch in das Remote-Repository.

  1. git push –set-upstream origin <branch name>

Git-Push Upstream einstellen

Mergen von „main“ in einen Branch

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. Sie können den main-Branch in Ihren Branch mergen, indem Sie Ihren Branch auschecken und denselben Befehl git merge verwenden.

  1. git checkout <branch name>
  2. git merge main

Git Merge in Branch

Git-FAQ

Was bedeutet es, wenn man einen Branch in Git erstellt?

Wenn man einen Branch erstellt, wird eine Momentaufnahme des vorhandenen Codes erstellt, damit man unabhängig vom main-Branch daran arbeiten kann.

Wie erstelle ich einen neuen Branch in Git?

Verwenden Sie den Befehl „git branch“ und geben Sie den Namen des Branch an, z. B. „git branch feature1“.

Wie kann ich sehen, welcher Branch aktiv ist?

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.

Wie kann ich an einem anderen Branch arbeiten?

Verwenden Sie „git checkout“ und den Namen des Branch, um ihn zu aktivieren.

Kann ich einen Branch innerhalb eines anderen Branch erstellen?

Ja, geben Sie den Namen des Branch an, auf dem der neue Branch basiert, z. B. „git branch feature-bug feature1“.

Mein Branch existiert nur lokal. Wie kann ich ihn zu meinem Remote-Git-Repository hinzufügen?

Das geht, indem Sie den Befehl „git push“ verwenden, um den Upstream-Branch festzulegen, z. B.: „git push -set-upstream origin <branch name>“.

Wie kann ich den main-Branch mit den Änderungen in meinem Branch aktualisieren?

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.

Wie kann ich einen Branch löschen?

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“.

Fazit

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.

Jeff Brown

Jeff Brown

Jeff Brown is a cloud engineer specializing in Microsoft technologies such as Office 365, Teams, Azure, and PowerShell.

 

Möchten Sie Varonis in Aktion erleben?

Vereinbaren Sie eine Demo oder wenden Sie sich an unseren Vertrieb unter +49 89 3803 7990