Verwirrt darüber, was genau remote-tracking Branches sind? Keine Sorge, es geht nicht nur dir so. Es gibt grundsätzlich zwei Arten von Branches: lokal und remote-tracking. Lokale Branches sind alltäglich. Sie sind einfach ein anderer Pfad im DAG, in den man einchecken kann. Remote-tracking Branches haben ein paar andere Absichten:
git pull
oder git fetch
verwendet werden.git status
erkennt, wieviele Commits die aktuelle Arbeit der entfernten Version des Branches voraus ist.Glücklicherweise gibt der git branch
Befehl Einblick darin, welcher Branch was ist. Bei frisch geklonten Repositories ist für gewöhnlich folgende Ausgabe zu sehen:
$ git branch * master
Das zeigt nur den üblichen lokalen Branch, den Master. Für die entfernten Branches ist folgender Befehl nötig:
$ git branch -r origin/HEAD origin/master
Und wenn schließlich alle Branches angezeigt werden sollen:
$ git branch -a * master origin/HEAD origin/master
Sobald Branches mit der --track
Option erstellt werden, sind sie als Verbindung zum Remote Branch konfiguriert. Möchte man zum Beispiel einen neuen Branch vom Master Branch aus dem origin Repository erzeugen, würde das in diesem Fall einen Branch ergeben, der automatisch mit dem entfernen Branch verbunden ist und von dem so direkt die Commits geladen werden können:
$ git branch --track feature1 origin/master Branch feature1 set up to track remote branch refs/remotes/origin/master.
Von hier aus kann man den Branch mit git checkout
auswählen und damit arbeiten. Und weil der entfernte Branch verfolgt wird, weiß Git, wo die Änderungen bei einem Fetch oder Pull eingebracht werden müssen.
Lokale Branches können auch von jedem beliebigen Startpunkt erzeugt werden, sei es ein remote-tracking Branch oder jede andere übergebene treeish Option. Hier sind ein paar Beispiele:
$ git branch --no-track feature2 origin/master $ git branch --no-track feature3 HEAD~4 $ git branch --no-track feature4 f21e886
In diesen Beispielen wurde die Option --no-track
übergeben. Damit wird sichergestellt, dass die Branches nicht von einem remote-tracking Branch abgeleitet werden. Man kann diese Verhaltensweise in der Datei ~/.gitconfig
einstellen. Wie das Git Cheat Sheet hierzu sagt:
git config branch.autosetupmerge true
tells git-branch and git-checkout to setup new branches so that git-pull(1)
will appropriately merge from that remote branch. Recommended. Without this,
you will have to add —track to your branch command or manually merge remote
tracking branches with “fetch” and then “merge”.
Dieser Beitrag löste hoffentlich die Verwirrung um Branches und was genau remote-tracking Branches machen ein wenig auf. Wenn du weitere Ideen für bessere Erklärungen oder vergleichbare Ressourcen hast, teile sie uns in den Kommentaren mit oder schicke uns einen Tip!