Hier ist die lange Antwort.
Fernbedienungen:
Wenn Sie Git gemeinsam verwenden, müssen Sie Ihre Commits wahrscheinlich mit anderen Computern oder Standorten synchronisieren. Jeder Computer oder Standort wird in der Terminologie von Git als Remote bezeichnet , und jeder kann einen oder mehrere Zweige haben. Meistens haben Sie nur einen Namen origin
. Führen Sie Folgendes aus, um alle Fernbedienungen aufzulisten git remote
:
$ git remote
bitbucket
origin
Sie können sehen, für welche Speicherorte diese Remote-Namen Verknüpfungen sind, indem Sie Folgendes ausführen git remote -v
:
$ git remote -v
bitbucket git@bitbucket.org:flimm/example.git (fetch)
bitbucket git@bitbucket.org:flimm/example.git (push)
origin git@github.com:Flimm/example.git (fetch)
origin git@github.com:Flimm/example.git (push)
Jede Fernbedienung hat ein Verzeichnis unter git/refs/remotes/
:
$ ls -F .git/refs/remotes/
bitbucket/ origin/
Zweige auf Ihrer Maschine:
TLDR: Auf Ihrem lokalen Computer gibt es drei Arten von Zweigen: lokale Nicht-Tracking-Zweige, lokale Tracking-Zweige und Remote-Tracking-Zweige. Auf einem Remotecomputer haben Sie nur einen Zweigtyp.
1. Lokale Niederlassungen
Sie können eine Liste aller lokalen Zweige auf Ihrem Computer anzeigen, indem Sie Folgendes ausführen git branch
:
$ git branch
master
new-feature
Jeder lokale Zweig hat eine Datei unter .git/refs/heads/
:
$ ls -F .git/refs/heads/
master new-feature
Es gibt zwei Arten von lokalen Zweigen auf Ihrem Computer: Nicht verfolgte lokale Zweige und Verfolgung lokaler Zweige.
1.1 Nicht nachverfolgbare lokale Niederlassungen
Lokale Zweige ohne Nachverfolgung sind keinem anderen Zweig zugeordnet. Sie erstellen eine durch Ausführen git branch <branchname>
.
1.2. Verfolgung lokaler Niederlassungen
Das Verfolgen lokaler Zweige ist einem anderen Zweig zugeordnet, normalerweise einem Fernverfolgungszweig. Sie erstellen eine durch Ausführen git branch --track <branchname> [<start-point>]
.
Sie können anzeigen, welche Ihrer lokalen Niederlassungen Niederlassungen verfolgen, indem Sie git branch -vv
:
$ git branch -vv
master b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message
An der Ausgabe dieses Befehls können Sie erkennen, dass der lokale Zweig master
den Fernverfolgungszweig verfolgt origin/master
und der lokale Zweig new-feature
nichts verfolgt.
Eine andere Möglichkeit, um zu sehen, welche Zweige Zweige verfolgen, besteht darin, einen Blick darauf zu werfen .git/config
.
Das Verfolgen lokaler Niederlassungen ist nützlich. Mit ihnen können Sie git pull
und git push
ohne Angabe des zu verwendenden Upstream-Zweigs ausführen . Wenn der Zweig nicht für die Verfolgung eines anderen Zweigs eingerichtet ist, wird folgende Fehlermeldung angezeigt:
$ git checkout new-feature
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream new-feature <remote>/<branch>
2. Remote-Tracking-Zweige (noch auf Ihrem Computer)
Sie können eine Liste aller Remote-Tracking-Zweige auf Ihrem Computer anzeigen, indem Sie Folgendes ausführen git branch -r
:
$ git branch -r
bitbucket/master
origin/master
origin/new-branch
Jeder Remote-Tracking-Zweig hat eine Datei unter .git/refs/<remote>/
:
$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│ └── master
└── origin/
├── master
└── new-branch
Stellen Sie sich Ihre Remote-Tracking-Zweige als Ihren lokalen Cache für das vor, was die Remote-Computer enthalten. Sie können Ihre Remote-Tracking-Zweige mit aktualisieren, indem Sie git fetch
diese git pull
hinter den Kulissen verwenden.
Obwohl alle Daten für einen Remote-Tracking-Zweig lokal auf Ihrem Computer gespeichert sind (wie ein Cache), wird er nie als lokaler Zweig bezeichnet. (Zumindest würde ich es nicht so nennen!) Es wird nur ein Remote-Tracking-Zweig genannt.
Zweige auf einem Remote-Computer:
Sie können alle Remote-Zweige (dh die Zweige auf dem Remote-Computer) anzeigen, indem Sie Folgendes ausführen git remote show <remote>
:
$ git remote show origin
* remote origin
Fetch URL: git@github.com:Flimm/example.git
Push URL: git@github.com:Flimm/example.git
HEAD branch: master
Remote branches:
io-socket-ip new (next fetch will store in remotes/origin)
master tracked
new-branch tracked
Local ref configured for 'git pull':
master merges with remote master
new-branch merges with remote new-branch
Local ref configured for 'git push':
master pushes to master (up to date)
new-branch pushes to new-branch (fast-forwardable)
Dieser git remote
Befehl fragt den Remotecomputer über das Netzwerk nach seinen Zweigen ab. Die Remote-Tracking-Zweige auf Ihrem lokalen Computer werden nicht aktualisiert, verwendet git fetch
oder git pull
dafür.
In der Ausgabe können Sie alle auf dem Remote-Computer vorhandenen Zweige anzeigen, indem Sie unter der Überschrift "Remote-Zweige" nachsehen (als "veraltet" gekennzeichnete Zeilen ignorieren).
Wenn Sie sich am Remotecomputer anmelden und das Repository im Dateisystem finden könnten, könnten Sie sich alle Zweige unter ansehen refs/heads/
.
Spickzettel:
So löschen Sie einen lokalen Zweig, unabhängig davon, ob er verfolgt oder nicht verfolgt wird, sicher:
git branch -d <branchname>
So löschen Sie einen lokalen Zweig, unabhängig davon, ob er verfolgt oder nicht verfolgt wird:
git branch -D <branchname>
So löschen Sie einen Remote-Tracking-Zweig:
git branch -rd <remote>/<branchname>
So erstellen Sie einen neuen lokalen Non-Tracking-Zweig:
git branch <branchname> [<start-point>]
So erstellen Sie einen neuen lokalen Tracking-Zweig: (Beachten Sie, dass das Flag automatisch eingeschlossen wird , wenn <start-point>
es angegeben ist und ein Remote-Tracking-Zweig ist.)origin/foobar
--track
git branch --track <branchname> [<start-point]
Beispiel:
git branch --track hello-kitty origin/hello-kitty
So löschen Sie einen Zweig auf einem Remotecomputer:
git push --delete <remote> <branchname>
So löschen Sie alle veralteten Remote-Tracking-Zweige, dh die entsprechenden Zweige auf dem Remote-Computer sind nicht mehr vorhanden:
git remote prune <remote>
Möglicherweise haben Sie bemerkt, dass Sie in einigen Befehlen <remote>/<branch>
und anderen Befehlen , <remote> <branch>
. Beispiele: git branch origin/hello-kitty
und git push --delete origin hello-kitty
.
Es mag willkürlich erscheinen, aber es gibt eine einfache Möglichkeit, sich daran zu erinnern, wann ein Schrägstrich und wann ein Leerzeichen verwendet werden muss. Wenn Sie einen Schrägstrich verwenden, beziehen Sie sich auf einen Zweig mit Remoteverfolgung auf Ihrem eigenen Computer, während Sie sich bei Verwendung eines Speicherplatzes tatsächlich mit einem Zweig auf einem Remotecomputer über das Netzwerk befassen.