W3docs

Einführung

Wie Git-Branches funktionieren: erstellen, wechseln, zusammenführen, Konflikte lösen und Merge-Strategien auswählen. Mit Beispielen.

Übersichtsdiagramm zu Git-Merge-Konflikten

Ein Branch ist ein leichtgewichtiger, beweglicher Zeiger auf einen Commit. Er ermöglicht es, an einem neuen Feature, einem Bugfix oder einem Experiment isoliert zu arbeiten — ohne den Code zu berühren, auf den alle anderen angewiesen sind. Wenn die Arbeit abgeschlossen ist, wird der Branch wieder zusammengeführt, sodass seine Änderungen Teil der Hauptentwicklungslinie werden.

Diese Seite bietet einen Überblick über den Branching-Teil des Buches. Sie stellt die Befehle vor, mit denen Branches erstellt, gewechselt, zusammengeführt und gelöscht werden, und zeigt, wie mit Konflikten umzugehen ist, die entstehen können, wenn zwei Entwicklungslinien denselben Code ändern. Jeder Abschnitt verlinkt auf ein eigenes Kapitel mit allen Details. Am Ende dieses Teils sollten Sie mit dem alltäglichen Branching-Workflow vertraut sein, der im folgenden Beispiel gezeigt wird.

git branch

Der Befehl git branch erstellt, listet und löscht Branches. Er wechselt nicht zwischen Branches und führt keine verzweigten Historien zusammen — das sind die Aufgaben von git checkout und git merge. Das Erstellen eines Branches fügt lediglich einen neuen Zeiger auf den aktuellen Commit hinzu; es werden keine Dateien kopiert oder die Historie verändert, weshalb Branching in Git schnell und kostengünstig ist.

git branch              # list local branches (the current one is marked with *)
git branch new-feature  # create a branch called new-feature
git branch -d old-work  # delete a branch that has already been merged

Ein Git-Branch lässt sich am besten als Zeiger auf einen Snapshot Ihrer Änderungen verstehen, nicht als separate Kopie des Projekts.

git checkout

Der Befehl git checkout wechselt Branches oder stellt Dateien im Arbeitsverzeichnis wieder her. Beim Wechseln aktualisiert Git die Dateien im Arbeitsverzeichnis so, dass sie der im Ziel-Branch gespeicherten Version entsprechen, und verschiebt den HEAD-Zeiger — die Referenz, die verfolgt, „wo Sie sich gerade befinden" — zu diesem Branch.

git checkout new-feature      # switch to an existing branch
git checkout -b new-feature   # create new-feature AND switch to it in one step

In modernem Git können Sie für den Branch-Wechsel auch git switch verwenden; checkout bleibt der am häufigsten dokumentierte Befehl. Die Option -b ist die Form, die Sie beim Starten einer neuen Arbeit am häufigsten verwenden werden.

git merge

Der Befehl git merge integriert unabhängige Entwicklungslinien in einen einzigen Branch. Zunächst wird der Branch ausgecheckt, der die Änderungen empfangen soll, dann wird der andere Branch darin zusammengeführt. Git löst den Merge auf eine von zwei Arten:

  • Fast-forward — wenn der empfangende Branch seit der Verzweigung des anderen Branches keine eigenen Commits hat, verschiebt Git seinen Zeiger einfach vorwärts. Es wird kein neuer Commit erstellt.
  • Drei-Wege-Merge — wenn beide Branches neue Commits haben, kombiniert Git sie und erstellt einen dedizierten Merge-Commit mit zwei Eltern-Commits.
git checkout main        # the branch that will receive the work
git merge new-feature    # bring new-feature's commits into main
git branch -d new-feature  # delete the merged branch (now redundant)

Merge-Konflikte

Ein Merge-Konflikt tritt auf, wenn Git zwei Branches nicht automatisch zusammenführen kann — typischerweise wenn beide Branches dieselben Zeilen derselben Datei ändern oder wenn ein Branch eine Datei löscht, die der andere geändert hat. Git unterbricht den Merge und markiert die betroffenen Bereiche in den betroffenen Dateien mit Konfliktmarkierungen wie dieser:

<<<<<<< HEAD
the change on the current branch
=======
the change coming from the other branch
>>>>>>> new-feature

Ein Konflikt wird gelöst, indem die Datei in den gewünschten Endzustand gebracht, die Markierungen entfernt und das Ergebnis dann gestaged und committet wird. Durch die Arbeit in isolierten Branches bleiben Konflikte klein und selten, aber sie sind ein normaler Teil der Zusammenarbeit — kein Zeichen dafür, dass etwas schiefgelaufen ist.

git-Merge-Strategien

Wenn Arbeit in die Hauptlinie gemergt werden soll, wendet Git eine Merge-Strategie an — den Algorithmus, den es verwendet, um die Branches zu kombinieren. Wenn Sie keine explizit angeben, wählt Git einen sinnvollen Standard (ort in aktuellen Versionen, früher recursive) basierend auf den beteiligten Branches. In der Regel müssen Sie eine Strategie nie manuell festlegen; es ist jedoch nützlich zu wissen, dass sie existieren, für die gelegentlichen Fälle, in denen eine bestimmte Strategie hilft.

Ein typischer Branching-Workflow

Wenn man die Befehle zusammensetzt, verläuft die Entwicklung eines einzelnen Features in der Regel so:

git checkout -b add-login   # 1. branch off main and switch to it
# ... edit files, then ...
git add .
git commit -m "Add login form"
git checkout main           # 2. switch back to the receiving branch
git merge add-login         # 3. integrate the feature
git branch -d add-login     # 4. clean up the merged branch

Um tiefer einzutauchen, fahren Sie mit git branch fort, um den vollständigen Satz an Branch-Operationen kennenzulernen, oder springen Sie direkt zum Feature-Branch-Workflow, um dieses Muster im Einsatz bei einem echten Team zu sehen.

Übung

Übung
Was sind die Funktionen der verschiedenen Git-Befehle im Zusammenhang mit Branching?
Was sind die Funktionen der verschiedenen Git-Befehle im Zusammenhang mit Branching?
Was this page helpful?