-
1. Erste Schritte
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Branches auf einen Blick
- 3.2 Einfaches Branching und Merging
- 3.3 Branch-Management
- 3.4 Branching-Workflows
- 3.5 Remote-Branches
- 3.6 Rebasing
- 3.7 Zusammenfassung
-
4. Git auf dem Server
- 4.1 Die Protokolle
- 4.2 Git auf einem Server einrichten
- 4.3 Erstellung eines SSH-Public-Keys
- 4.4 Einrichten des Servers
- 4.5 Git-Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Von Drittanbietern gehostete Optionen
- 4.10 Zusammenfassung
-
5. Verteiltes Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revisions-Auswahl
- 7.2 Interaktives Stagen
- 7.3 Stashen und Bereinigen
- 7.4 Deine Arbeit signieren
- 7.5 Suchen
- 7.6 Den Verlauf umschreiben
- 7.7 Reset entzaubert
- 7.8 Fortgeschrittenes Merging
- 7.9 Rerere
- 7.10 Debuggen mit Git
- 7.11 Submodule
- 7.12 Bundling
- 7.13 Replace (Ersetzen)
- 7.14 Anmeldeinformationen speichern
- 7.15 Zusammenfassung
-
8. Git einrichten
- 8.1 Git Konfiguration
- 8.2 Git-Attribute
- 8.3 Git Hooks
- 8.4 Beispiel für Git-forcierte Regeln
- 8.5 Zusammenfassung
-
9. Git und andere VCS-Systeme
- 9.1 Git als Client
- 9.2 Migration zu Git
- 9.3 Zusammenfassung
-
10. Git Interna
-
A1. Anhang A: Git in anderen Umgebungen
- A1.1 Grafische Schnittstellen
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Zusammenfassung
-
A2. Anhang B: Git in deine Anwendungen einbetten
- A2.1 Die Git-Kommandozeile
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Anhang C: Git Kommandos
- A3.1 Setup und Konfiguration
- A3.2 Projekte importieren und erstellen
- A3.3 Einfache Snapshot-Funktionen
- A3.4 Branching und Merging
- A3.5 Projekte gemeinsam nutzen und aktualisieren
- A3.6 Kontrollieren und Vergleichen
- A3.7 Debugging
- A3.8 Patchen bzw. Fehlerkorrektur
- A3.9 E-mails
- A3.10 Externe Systeme
- A3.11 Administration
- A3.12 Basisbefehle
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 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
|
Ä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