Git
Chapters ▾ 2nd Edition

3.3 Git Branching - Branch-Management

Branch-Management

Nachdem du nun einige Branches erzeugt, zusammengeführt und gelöscht hast, lass uns jetzt einige Werkzeuge für das Branch-Management betrachten, die sich als sehr nützlich erweisen werden, wenn du erst einmal Branches benutzt.

Der Befehl git branch kann noch mehr, als Branches zu erzeugen und zu löschen. Wenn du die Anweisung ohne Argumente ausführst, bekommst du eine einfache Auflistung deiner aktuellen Branches:

$ git branch
  iss53
* master
  testing

Beachte das Sternchen (*), das dem Branch master vorangestellt ist: es zeigt an, welchen Branch du gegenwärtig ausgecheckt hast (bzw. den Branch, auf den HEAD zeigt). Wenn du zu diesem Zeitpunkt einen Commit durchführst, wird der Branch master durch deine neue Änderung vorwärts bewegt. Um sich den letzten Commit auf jedem Branch anzeigen zu lassen, kannst du die Anweisung git branch -v ausführen:

$ git branch -v
  iss53   93b412c Fix javascript issue
* master  7a98805 Merge branch 'iss53'
  testing 782fd34 Add scott to the author list in the readme

Die nützlichen Optionen --merged und --no-merged kann diese Liste nach Branches filtern, welche bereits mit dem Branch, auf dem du dich gegenwärtig befindest, zusammengeführt wurden und welche nicht. Um zu sehen, welche Branches schon mit dem Branch zusammengeführt wurden, auf dem du gerade bist, kannst du die Anweisung git branch --merged ausführen:

$ git branch --merged
  iss53
* master

Da du den Branch iss53 schon früher gemerged hast, siehst du ihn in dieser Liste. Branches auf dieser Liste ohne vorangestelltes * können für gewöhnlich einfach mit der Anweisung git branch -d gelöscht werden; Du hast deren Änderungen bereits zu einem anderen Branch hinzugefügt, sodass du nichts verlieren würdest.

Um alle Branches zu sehen, welche Änderungen enthalten, die du noch nicht integriert hast, könntest du die Anweisung git branch --no-merged ausführen:

$ git branch --no-merged
  testing

Das zeigt dir einen anderen Branch. Da er Änderungen enthält, die noch nicht integriert wurden, würde der Versuch, ihn mit git branch -d zu löschen, fehlschlagen:

$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.

Wenn du den Branch wirklich löschen und diese Bearbeitungen aufgeben willst, kannst du dies mit der Option -D erzwingen, worauf git in seinem Output hinweist.

Hinweis

Wenn du keinen Commit- oder Branch-Namen als Argument angibst, zeigen dir die oben beschriebenen Optionen --merged und --no-merged was jeweils in deinem current-Branch gemerged oder nicht gemerged wurde.

Du kannst immer ein zusätzliches Argument angeben, um nach dem Merge-Status in Bezug auf einen anderen Branch zu fragen, ohne zu diesen anderen Branch wechseln zu müssen. So wie im Beispiel unten: „Was ist nicht in den Branch master integriert?“

$ git checkout testing
$ git branch --no-merged master
  topicA
  featureB

Ändern eines Branchnamens

Achtung

Benenne keine Branches um, die noch von anderen Mitstreitern verwendet werden. Benenne einen Branch wie master / main / mainline nicht um, ohne den Abschnitt „Ändern des Namens des Haupt-Branch“ gelesen zu haben.

Angenommen, du hast einen Branch mit dem Namen bad-branch-name und möchtest ihn in corrected-branch-name ändern, während die gesamte Historie beibehalten wird. Du möchtest auch den Branchnamen auf dem Remote-Repository ändern (GitHub, GitLab, anderer Server). Wie machst du das?

Benennen den Branch lokal mit dem Befehl git branch --move um:

$ git branch --move bad-branch-name corrected-branch-name

Dies ersetzt deinen Branch bad-branch-name durch corrected-branch-name, aber diese Änderung ist vorerst nur lokal. Um den korrigierten Branchnamen für andere auf dem Remote-Repository sichtbar zu machen, pushe ihn:

$ git push --set-upstream origin corrected-branch-name

Jetzt werfen wir einen kurzen Blick darauf, wo wir momentan stehen:

$ git branch --all
* corrected-branch-name
  main
  remotes/origin/bad-branch-name
  remotes/origin/corrected-branch-name
  remotes/origin/main

Beachte, dass du dich auf dem Branch corrected-branch-name befindest und er ist auf dem Remote-Repository verfügbar. Der fehlerhafte Branch ist ebenfalls auf dem Remote-Repository weiterhin vorhanden. Du kannst ihn vom Remote-Repository folgendermaßen löschen:

$ git push origin --delete bad-branch-name

Nun ist der falsche Branchname vollständig durch den korrigierten Branchnamen ersetzt.

Ändern des Master Branch Namens

Warnung

Wenn du den Namen eines Branches wie master/main/mainline/default änderst, werden die Integrationen, Dienste, Hilfsprogramme und Build/Release-Skripte, die dein Repository verwendet, höchstwahrscheinlich nicht mehr funktionieren. Bevor du das tust, solltest du dies gründlich mit deinen Mitstreitern besprechen. Stelle außerdem sicher, dass du dein Repo gründlich durchsuchst und alle Verweise auf den alten Branchnamen in deinem Code und in deinen Skripten aktualisierst.

Benennen deinen lokalen master Branch mit dem folgenden Befehl in main um

$ git branch --move master main

Es gibt lokal keinen master Branch mehr, da er in main Branch umbenannt wurde.

Damit andere den neuen main Branch sehen können, musst du ihn auf das Remote-Repository pushen. Dadurch wird der umbenannte Branch auf dem Remote Repository verfügbar.

$ git push --set-upstream origin main

Jetzt haben wir folgenden Zustand:

$ git branch --all
* main
  remotes/origin/HEAD -> origin/master
  remotes/origin/main
  remotes/origin/master

Dein lokaler master Branch ist weg, da er durch den main Branch ersetzt wurde. Der Branch main ist nun auch auf dem Remote-Repository verfügbar. Aber im Remote-Repository existiert immer noch eine master Branch. Andere Mitstreiter werden weiterhin den Branch master als Grundlage für ihre Arbeit verwenden, bis du weitere Änderungen vornimmst.

Jetzt hast du noch ein paar Aufgaben vor dir, um den Übergang abzuschließen:

  • Alle Projekte, die von diesem abhängen, müssen ihren Code und/oder ihre Konfiguration aktualisieren.

  • Aktualisiere alle Test-Runner Konfigurationsdateien.

  • Passe Build- und Release-Skripte an.

  • Richte Umleitungen auf deinem Repo-Host für Dinge wie den Standardbranch des Repos, Merge-Regeln und andere Dinge ein, die mit Branchnamen übereinstimmen.

  • Aktualisiere die Verweise auf den alten Branch in der Dokumentation.

  • Schließe oder Merge alle Pull-Requests, die auf den alten Branch zeigen.

Nachdem du alle diese Aufgaben erledigt hast und sicher bist, dass der main Branch genau wie der master Branch funktioniert, kannst du den master Branch löschen:

$ git push origin --delete master
scroll-to-top