Git
Chapters ▾ 2nd Edition

3.3 Git Branching - Branch-Management

Branch-Management

Nachdem Sie nun einige Branches erzeugt, zusammengeführt und gelöscht haben, lassen Sie uns jetzt einige Werkzeuge für das Branch-Management betrachten, die sich als sehr nützlich erweisen werden, wenn Sie erst einmal ständig Branches benutzen.

Der Befehl git branch kann noch mehr, als Branches zu erzeugen und zu löschen. Wenn Sie die Anweisung ohne Argumente ausführen, bekommen Sie eine einfache Auflistung Ihrer aktuellen Branches:

$ git branch
  iss53
* master
  testing

Beachten Sie das Sternchen (*), das dem Branch master vorangestellt ist: es zeigt an, welchen Branch Sie gegenwärtig ausgecheckt haben (bzw. den Branch, auf den HEAD zeigt). Wenn Sie zu diesem Zeitpunkt einen Commit durchführen, wird der Branch master durch Ihre neue Änderung vorwärts bewegt. Um sich den letzten Commit auf jedem Branch anzeigen zu lassen, können Sie 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 können diese Liste nach Branches filtern, welche bereits mit dem Branch, auf dem Sie sich gegenwärtig befinden, zusammengeführt wurden und welche nicht. Um zu sehen, welche Branches schon mit dem Branch zusammengeführt wurden, auf dem Sie gerade sind, können Sie die Anweisung git branch --merged ausführen:

$ git branch --merged
  iss53
* master

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

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

$ git branch --no-merged
  testing

Das zeigt Ihnen 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 Sie den Branch wirklich löschen und diese Bearbeitungen aufgeben wollen, können Sie dies mit der Option -D erzwingen, wie die hilfreiche Meldung darauf hinweist.

Hinweis

Wenn Sie keinen Commit- oder Branch-Namen als Argument angeben, zeigen Ihnen die oben beschriebenen Optionen --merged und --no-merged was jeweils in Ihren current-Branch gemergt oder nicht gemergt wurde.

Sie können immer ein zusätzliches Argument angeben, um nach dem Merge-Status in Bezug auf einen anderen Zweig zu fragen, ohne zu diesen anderen Zweig zuerst 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

Benennen Sie keine Branches um, die noch von anderen Mitarbeitern verwendet werden. Benennen Sie einen Branch wie master / main / mainline nicht um, ohne den Abschnitt „Ändern des Namens des Hauptzweigs“ gelesen zu haben.

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

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

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

Dies ersetzt Ihren 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, pushen Sie ihn:

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

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

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

Beachten Sie, dass Sie sich auf dem Branch corrected-branch-name befinden und er ist auf dem Remote-Repository verfügbar. Der fehlerhafte Branch ist ebenfalls auf dem Remote-Repository weiterhin vorhanden. Sie können 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 Sie den Namen eines Branches wie master/main/mainline/default ändern, werden die Integrationen, Dienste, Hilfsprogramme und Build/Release-Skripte, die Ihr Repository verwendet, höchstwahrscheinlich nicht mehr funktionieren. Bevor Sie dies tun, sollten Sie dies gründlich mit Ihren Mitstreitern beraten. Stellen Sie außerdem sicher, dass Sie Ihr Repo gründlich durchsuchen und alle Verweise auf den alten Branchnamen in Ihrem Code und in Ihren Skripten aktualisieren.

Benennen Sie Ihren 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, müssen Sie 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

Ihr 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 Sie weitere Änderungen vornehmen.

Jetzt haben Sie noch ein paar Aufgaben vor sich, um den Übergang abzuschließen:

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

  • Aktualisieren Sie alle Test-Runner Konfigurationsdateien.

  • Passen Sie Build- und Release-Skripte an.

  • Leiten Sie die Einstellungen auf Ihrem Repo-Host für Dinge wie den Standardbranch des Repos, Zusammenführungsregeln und andere Dinge um, die mit den Branchnamen übereinstimmen.

  • Aktualisieren Sie die Verweise auf den alten Branch in der Dokumentation.

  • Schließen oder Mergen sie alle Pull-Anforderungen, die auf den alten Branch abzielen.

Nachdem Sie alle diese Aufgaben erledigt haben und sicher sind, dass der main Branch genau wie der master Branch ausgeführt wird, können Sie den master Branch löschen:

$ git push origin --delete master