-
1. Erste Schritte
- 1.1 Über Versionskontrolle
- 1.2 Eine kurze Geschichte von Git
- 1.3 Was ist Git?
- 1.4 Die Kommandozeile
- 1.5 Git installieren
- 1.6 Erstmalige Git-Einrichtung
- 1.7 Hilfe bekommen
- 1.8 Zusammenfassung
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Branches im Überblick
- 3.2 Grundlegendes 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 Generieren Ihres SSH-Public-Keys
- 4.4 Einrichten des Servers
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Drittanbieter-Hosting-Optionen
- 4.10 Zusammenfassung
-
5. Verteiltes Git
-
6. GitHub
-
7. Git-Werkzeuge
- 7.1 Revisionsauswahl
- 7.2 Interaktives Staging
- 7.3 Stashing und Bereinigen
- 7.4 Ihre Arbeit signieren
- 7.5 Suchen
- 7.6 Historie umschreiben
- 7.7 Reset entmystifiziert
- 7.8 Fortgeschrittenes Merging
- 7.9 Rerere
- 7.10 Debugging mit Git
- 7.11 Submodule
- 7.12 Bundling
- 7.13 Ersetzen
- 7.14 Credential-Speicher
- 7.15 Zusammenfassung
-
8. Git anpassen
-
9. Git und andere Systeme
- 9.1 Git als Client
- 9.2 Migration zu Git
- 9.3 Zusammenfassung
-
10. Git-Interna
- 10.1 Plumbing und Porcelain
- 10.2 Git-Objekte
- 10.3 Git-Referenzen
- 10.4 Packfiles
- 10.5 Die Refspec
- 10.6 Übertragungsprotokolle
- 10.7 Wartung und Datenwiederherstellung
- 10.8 Umgebungsvariablen
- 10.9 Zusammenfassung
-
Anhang A: Git in anderen Umgebungen
- A1.1 Grafische Oberflächen
- 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
-
Anhang B: Git in Ihre Anwendungen einbetten
- A2.1 Kommandozeilen-Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
Anhang C: Git-Befehle
- A3.1 Einrichtung und Konfiguration
- A3.2 Projekte abrufen und erstellen
- A3.3 Grundlegendes Snapshotting
- A3.4 Branching und Merging
- A3.5 Projekte teilen und aktualisieren
- A3.6 Inspektion und Vergleich
- A3.7 Debugging
- A3.8 Patching
- A3.9 E-Mail
- A3.10 Externe Systeme
- A3.11 Administration
- A3.12 Plumbing-Befehle
3.3 Git Branching - Branch Management
Branch Management
Nachdem Sie nun einige Branches erstellt, zusammengeführt und gelöscht haben, sehen wir uns einige Branch-Management-Tools an, die nützlich sind, wenn Sie Branches ständig verwenden.
Der Befehl git branch tut mehr als nur Branches erstellen und löschen. Wenn Sie ihn ohne Argumente ausführen, erhalten Sie eine einfache Liste Ihrer aktuellen Branches.
$ git branch
iss53
* master
testing
Beachten Sie das Zeichen *, das dem master-Branch vorangestellt ist: Es zeigt den Branch an, den Sie gerade ausgecheckt haben (d. h. den Branch, auf den HEAD zeigt). Das bedeutet, dass der master-Branch mit Ihrer neuen Arbeit voranschreiten wird, wenn Sie zu diesem Zeitpunkt committen. Um den letzten Commit auf jedem Branch zu sehen, können Sie 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, die Sie bereits in den aktuellen Branch übernommen haben oder noch nicht. Um zu sehen, welche Branches bereits in den aktuellen Branch übernommen wurden, können Sie git branch --merged ausführen.
$ git branch --merged
iss53
* master
Da Sie iss53 bereits früher zusammengeführt haben, sehen Sie ihn in Ihrer Liste. Branches auf dieser Liste, denen kein * vorangestellt ist, können im Allgemeinen mit git branch -d gelöscht werden. Sie haben deren Arbeit bereits in einen anderen Branch integriert, sodass Sie nichts verlieren werden.
Um alle Branches anzuzeigen, die Arbeit enthalten, die Sie noch nicht übernommen haben, können Sie git branch --no-merged ausführen.
$ git branch --no-merged
testing
Dies zeigt Ihren anderen Branch an. Da er Arbeit enthält, die noch nicht übernommen wurde, wird das Löschen mit git branch -d 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 Arbeit verlieren möchten, können Sie dies mit -D erzwingen, wie die hilfreiche Meldung anzeigt.
|
Tipp
|
Die oben beschriebenen Optionen Sie können jederzeit ein zusätzliches Argument angeben, um den Merge-Status in Bezug auf einen anderen Branch abzufragen, ohne diesen anderen Branch zuerst auszuchecken, z. B. was nicht in den
|
Ändern eines Branch-Namens
|
Vorsicht
|
Benennen Sie keine Branches um, die noch von anderen Kollaborateuren verwendet werden. Benennen Sie einen Branch wie master/main/mainline nicht um, ohne den Abschnitt Ändern des Master-Branch-Namens gelesen zu haben. |
Angenommen, Sie haben einen Branch namens bad-branch-name und möchten ihn in corrected-branch-name umbenennen, während die gesamte Historie erhalten bleibt. Sie möchten auch den Branch-Namen im Remote (GitHub, GitLab, anderer Server) ändern. 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 bad-branch-name durch corrected-branch-name, aber diese Änderung ist vorerst nur lokal. Damit andere den korrigierten Branch im Remote sehen können, pushen Sie ihn.
$ git push --set-upstream origin corrected-branch-name
Nun werfen wir einen kurzen Blick darauf, wo wir jetzt 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 dieser im Remote verfügbar ist. Der Branch mit dem schlechten Namen ist dort jedoch auch noch vorhanden, aber Sie können ihn löschen, indem Sie den folgenden Befehl ausführen:
$ git push origin --delete bad-branch-name
Nun ist der schlechte Branch-Name vollständig durch den korrigierten Branch-Namen ersetzt.
Ändern des Master-Branch-Namens
|
Warnung
|
Das Ändern des Namens eines Branches wie master/main/mainline/default wird die Integrationen, Dienste, Hilfsprogramme und Build/Release-Skripte, die Ihr Repository verwendet, unterbrechen. Stellen Sie sicher, dass Sie sich vorab mit Ihren Kollaborateuren beraten. Suchen Sie außerdem Ihr Repository gründlich durch und aktualisieren Sie alle Verweise auf den alten Branch-Namen in Ihrem Code und Ihren Skripten. |
Benennen Sie Ihren lokalen master-Branch mit dem folgenden Befehl in main um:
$ git branch --move master main
Es gibt keinen lokalen master-Branch mehr, da er in den main-Branch umbenannt wurde.
Damit andere den neuen main-Branch sehen können, müssen Sie ihn auf den Remote pushen. Dies macht den umbenannten Branch im Remote verfügbar.
$ git push --set-upstream origin main
Nun landen wir im 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 main-Branch ist im Remote vorhanden. Der alte master-Branch ist jedoch immer noch im Remote vorhanden. Andere Kollaborateure werden den master-Branch weiterhin als Basis ihrer Arbeit verwenden, bis Sie weitere Änderungen vornehmen.
Nun stehen Ihnen noch einige Aufgaben bevor, um den Übergang abzuschließen:
-
Alle Projekte, die von diesem abhängen, müssen ihren Code und/oder ihre Konfiguration aktualisieren.
-
Aktualisieren Sie alle Testlaufkonfigurationsdateien.
-
Passen Sie Build- und Release-Skripte an.
-
Leiten Sie Einstellungen auf Ihrem Repo-Host für Dinge wie den Standard-Branch des Repos, Merge-Regeln und andere Dinge, die Branch-Namen übereinstimmen, um.
-
Aktualisieren Sie Verweise auf den alten Branch in der Dokumentation.
-
Schließen oder mergen Sie alle Pull-Requests, die auf den alten Branch abzielen.
Nachdem Sie all diese Aufgaben erledigt haben und sicher sind, dass der main-Branch genauso funktioniert wie der master-Branch, können Sie den master-Branch löschen.
$ git push origin --delete master