Main Branch (früher Master) ist der Hauptzweig von Git, der stabilen Produktionscode für die Bereitstellung enthält. Jeder Commit in main entspricht einer Release-Version des Projekts, und der Zweig selbst ist vor direkten Änderungen geschützt und dient als einzige Quelle der Wahrheit für das gesamte Team. Laut GitHub, 2020 heißt der standardmäßige neue Zweig seit Oktober 2020 main statt master.
Wichtige Punkte
Main Branch (oder Master – je nach Repository-Einstellungen) ist der Standardzweig, der beim Initialisieren eines beliebigen Git-Repositorys erstellt wird. Es ist der Hauptzweig des Projekts und enthält Code, der für die Produktionsbereitstellung bereit ist.
Im Gegensatz zu develop, wo die tägliche Arbeit mit neuen Funktionen in vollem Gange ist, ist main die Schaufenster des Projekts. Jede Codeversion in main hat einen vollständigen Zyklus durchlaufen: Entwicklung in einem Feature-Zweig, Integration in develop, Release-Vorbereitung in einem Release-Zweig und abschließende Tests. Erst danach gelangen Änderungen zu main.
Schlüsselprinzip: main muss immer stabil sein. Wenn ein Fehler in main gefunden wird, bedeutet dies, dass ein dringender Hotfix außer der Reihe veröffentlicht werden muss. Daher wird main in professionellen Projekten durch Branch-Schutzregeln vor versehentlichen Änderungen geschützt.
Laut Git Book ist main kein spezieller Zweig mit einzigartigen Eigenschaften, sondern ein normaler Verweis auf einen Commit, der konventionell als Hauptzweig betrachtet wird. Git unterscheidet auf Systemebene nicht zwischen main und einem anderen Zweig.
Historisch gesehen hieß der Standardzweig in Git master. Im Juni 2020 lenkte die Black-Lives-Matter-Bewegung die Aufmerksamkeit auf die Begriffe master und slave in der IT-Branche. GitHub kündigte den Übergang zum Begriff main für den Standardzweig an.
Seit Oktober 2020 werden alle neuen Repositorys auf GitHub mit dem main-Zweig erstellt. GitLab und Bitbucket haben ebenfalls Unterstützung für main als Standardnamen implementiert. Git 2.28 (Juli 2020) fügte die Option init.defaultBranch zum Konfigurieren des Standardzweignamens hinzu.
Technisch gesehen ist das Umbenennen eines vorhandenen Zweigs von master in main eine einfache Operation. Die Hauptherausforderung besteht darin, alle Verweise in CI/CD-Konfigurationen, Dokumentation und lokalen Repositorys der Entwickler zu aktualisieren.
Um einen Zweig in einem vorhandenen Repository umzubenennen, führen Sie Folgendes aus:
# Lokales Umbenennen von master in main
git branch -m master main
# Aktualisieren des entfernten Repositorys
git push -u origin main
# Löschen des alten master auf dem Server
git push origin --delete master
# Aktualisieren von HEAD auf dem Server
# (über GitHub-Weboberfläche: Settings → Branches → Default branch)
Git Flow und GitHub Flow definieren die Rolle des main-Zweigs unterschiedlich. Die Wahl des Modells hängt von der Teamgröße, der Release-Häufigkeit und den Anforderungen an die Codestabilität ab.
| Merkmal | Git Flow | GitHub Flow |
|---|---|---|
| Rolle von main | Nur Release-Versionen | Zentraler Entwicklungszweig |
| Zusätzliche Zweige | Develop, Release, Hotfix | Nur Feature-Zweige |
| Release-Häufigkeit | Alle 1–4 Wochen | Mehrmals täglich |
| Komplexität | Hoch | Niedrig |
| Wann wählen | Mobile Apps mit Release-Zyklen | Webdienste mit kontinuierlicher Bereitstellung |
Für die mobile Entwicklung ist Git Flow der Standard, da die Veröffentlichung einer App im App Store und bei Google Play feste Release-Zyklen hat. GitHub Flow eignet sich besser für Webprojekte, die mehrmals täglich bereitgestellt werden können.
In GitHub Flow gibt es keinen develop-Zweig. Alle Feature-Zweige werden direkt von main erstellt und nach Abschluss über einen Pull Request zurückgeführt. Jede Zusammenführung in main löst automatisch die Bereitstellung in der Produktion aus. Dieses Modell erfordert ein hohes Maß an Testautomatisierung und Teamdisziplin.
In GitHub Flow gibt es keinen develop-Zweig. Alle Feature-Zweige werden direkt von main erstellt und nach Abschluss über einen Pull Request zurückgeführt. Jede Zusammenführung in main löst automatisch die Bereitstellung in der Produktion aus. Dieses Modell erfordert ein hohes Maß an Testautomatisierung und Teamdisziplin.
Branch-Schutz für main ist eine obligatorische Einstellung in jedem kommerziellen Projekt. Ohne ihn könnte ein versehentlicher Push unvollständigen Code in die Produktion senden oder eine funktionierende Anwendung für alle Benutzer beschädigen.
Die Konfiguration aller sechs Regeln ist der Standard für mobile Projekte mit 10.000+ Benutzern. Für kleine Projekte reichen die ersten drei Regeln aus.
Die Schutzstufe von main hängt vom Projektumfang ab. Ein Startup kommt mit minimalem Schutz aus, während eine Unternehmensanwendung maximale Einschränkungen erfordert.
Tagging ist die Praxis, benannte Verweise auf bestimmte Commits in main zu erstellen. Jeder Tag entspricht einer in der Produktion veröffentlichten Version der Anwendung. Dies ermöglicht ein schnelles Umschalten auf jede vorherige Version zum Debuggen oder Patchen.
Der Standard für die Benennung von Tags in der mobilen Entwicklung ist SemVer (Semantische Versionierung): v1.2.3, wobei die erste Nummer die Hauptversion (breaking changes), die zweite die Nebenversion (neue Funktionen) und die dritte der Patch (Korrekturen) ist.
Ein Tag wird erstellt, nachdem der Release-Zweig in main zusammengeführt wurde. Dieser Commit wird dann in CI/CD erstellt, signiert und an den App Store gesendet. Wenn ein Fehler im Tag gefunden wird, wird ein Hotfix-Zweig von diesem Tag erstellt.
# Erstellen eines annotierten Release-Tags
git tag -a v2.4.1 -m "Release version 2.4.1"
# Senden des Tags an den Server
git push origin v2.4.1
# Alle Tags im Repository anzeigen
git tag -l "v2.*"
# Erstellen eines Hotfix-Zweigs von einem bestimmten Tag
git checkout -b hotfix/crash-fix v2.4.1
Das Verständnis der Branch-Hierarchie in Git Flow ist die Grundlage für die richtige Organisation der Zusammenarbeit. Jeder Branch-Typ hat seine eigene Quelle, seinen Zweck und seine Zusammenführungsregeln.
Wichtige Regel: Feature wird niemals direkt in main zusammengeführt. Feature → Develop → Release → Main ist die korrekte Zusammenführungskette. Ein Verstoß gegen diese Regel macht das gesamte Git-Flow-Modell sinnlos.
Betrachten wir ein Szenario: Das Team hat die Vorbereitung des Releases v2.5.0 abgeschlossen. Der Release-Zweig wurde überprüft und ist bereit, in main zusammengeführt zu werden. Nach der Zusammenführung wird ein Tag erstellt und das Release veröffentlicht.
# Wechseln zu main und aktualisieren
git checkout main
git pull origin main
# Zusammenführen des verifizierten Release-Zweigs
git merge --no-ff release/2.5.0
# Erstellen eines Release-Tags
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# Senden von main und Tag an den Server
git push origin main --tags
Das Flag --no-ff (no fast-forward) garantiert die Erstellung eines Merge-Commits, selbst wenn die Zusammenführung durch einfaches Verschieben des Zeigers hätte erfolgen können. Dies bewahrt die Information, dass die Änderungen von einem Release-Zweig kamen, was die Analyse des Verlaufs erleichtert.
Wenn ein kritischer Fehler in der Produktion entdeckt wird, unterscheidet sich der Prozess von einem normalen Release. Ein Hotfix wird von main erstellt und nach der Behebung sowohl in main als auch in develop zusammengeführt.
Wenn ein kritischer Fehler in der Produktion entdeckt wird, unterscheidet sich der Prozess von einem normalen Release. Ein Hotfix wird von main erstellt und nach der Behebung sowohl in main als auch in develop zusammengeführt.
# Erstellen eines Hotfix-Zweigs von main
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# Beheben und committen
git add src/fix/
git commit -m "Fix crash on login screen"
# Hotfix zurück in main zusammenführen
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# Hotfix auch in develop zusammenführen
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# Hotfix-Zweig löschen
git branch -d hotfix/2.5.1-crash-fix
Häufig gestellte Fragen
Technisch gesehen – ja, es ist ein normaler Verweis auf einen Commit. Aber praktisch – nein, da main der Standardzweig ist und die meisten Plattformen das Löschen des als Standardzweig festgelegten Zweigs nicht erlauben. Erstellen Sie stattdessen einen neuen Standardzweig und löschen Sie dann den alten.
Wenn der Fehler nicht kritisch ist, verwenden Sie den normalen Prozess: Erstellen Sie einen Feature-Zweig von develop, beheben Sie den Fehler, führen Sie eine Code-Überprüfung durch und warten Sie auf den nächsten Release-Zyklus. Hotfix wird nur für kritische Fehler verwendet, die die Arbeit der Benutzer blockieren.
main ist ein lokaler Zweig auf Ihrem Computer. origin/main ist ein lokaler Cache des Zustands des entfernten Zweigs auf dem Server. Der Befehl git fetch aktualisiert origin/main, während git pull Änderungen sofort in Ihr lokales main übernimmt.
Verwenden Sie git clone, um das gesamte Repository in ein neues Verzeichnis zu kopieren. Wenn Sie die entfernte URL ändern müssen, führen Sie git remote set-url origin aus. Um das Arbeitsverzeichnis zu ändern, ohne das Repository zu kopieren, verwenden Sie git worktree add.
Ja, selbst in einem Zweipersonenteam ist der Schutz von main gerechtfertigt. Ein versehentlicher Push mit einem falschen Befehl könnte die Geschichte überschreiben. Minimaler Schutz – Verbot direkter Pushes und Anforderung von PRs – dauert 5 Minuten zur Einrichtung und verhindert stundenlange Datenwiederherstellung.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch