Wie stoppt man die Nachverfolgung eines Remote-Zweigs in Git?
Lesezeit: 9 Minuten
Jason Cohen
Wie stoppt man die Nachverfolgung einer entfernten Verzweigung in Git?
Ich bitte darum, das Tracking zu stoppen, weil ich in meinem konkreten Fall den lokalen Zweig löschen möchte, aber nicht den Remote-Zweig. Wenn Sie den lokalen Zweig löschen und die Löschung auf den Remote-Zweig verschieben, wird auch der Remote-Zweig gelöscht:
Wie lösche ich einen Git-Branch sowohl lokal als auch in GitHub?
Kann ich nur tun git branch -d the_branchund es wird nicht weitergegeben, wenn ich später git push?
Wird es sich nur ausbreiten, wenn ich laufen würde git push origin :the_branch später?
VonC
Wie in Yoshua Wuyts Antwort erwähnt, using git branch:
git branch --unset-upstream
Andere Optionen:
Sie müssen Ihren lokalen Zweig nicht löschen.
Löschen Sie einfach den lokalen Branch, der den Remote-Branch verfolgt:
git branch -d -r origin/<remote branch name>
-r, --remotes weist git an, den Remote-Tracking-Branch zu löschen (dh den Branch-Satz zu löschen, um den Remote-Branch zu verfolgen). Dieser Wille nicht Lösche den Zweig auf dem Remote-Repo!
Siehe „Es fällt mir schwer, Git-Fetch zu verstehen“
Es gibt kein solches Konzept lokaler Tracking-Zweige, sondern nur Remote-Tracking-Zweige.
Damit origin/master ist ein Remote-Tracking-Zweig für master in dem origin Repo
Wie in der Antwort von Dobes Vandermeer erwähnt, müssen Sie auch die zugehörige Konfiguration zurücksetzen lokal sich verzeigen:
Entfernen Sie die Upstream-Informationen für <branchname>.
Wenn keine Verzweigung angegeben ist, wird standardmäßig die aktuelle Verzweigung verwendet.
Das wird jeden Push/Pull völlig unbewusst machen origin/<remote branch name>.
Der Remote-Tracking-Zweig wird nach dem Git-Abruf neu erstellt. Kann man diese ausschließen?
– Matt R
6. August 2010 um 10:46 Uhr
@Matt: Ich glaube, dies würde durch die Einstellung von erfolgen remote.<name>.fetch refspec-Konfigurationseinstellung, aber ich bin mir nicht sicher, ob Sie einen Zweig ausschließen können, wenn Sie eine refspec angeben.
– VonC
6. August 2010 um 11:04 Uhr
@ruffin: das ist völlig normal: git branch -d -r origin/<remote branch name> löscht einen Remote-Tracking-Branch wie deklariert örtlich, in Ihrem Repo. Es wird nicht Löschen Sie den Zweig auf dem Remote-Repo selbst (nur a git push :development würde das machen). Also, wenn Sie Ihren Einheimischen pushen developmentmit einem anderen Verlauf als der Remote-Entwicklungszweig (auf dem Remote-Repo), erhalten Sie immer noch die non-fast-forward Warnung.
– VonC
15. Mai 2012 um 18:06 Uhr
@Marco stimmt, aber ich mache es trotzdem lieber, ich finde es “sauberer”.
– VonC
11. März 2013 um 15:29 Uhr
@GabrielStaples Ich stimme zu. Weitere Informationen zum Remote-Tracking: stackoverflow.com/a/44081446/6309, stackoverflow.com/a/38202006/6309 und stackoverflow.com/a/28341622/6309
– VonC
6. September 2020 um 9:24 Uhr
Yoshua Wuyts
So entfernen Sie den Upstream für den aktuellen Zweig:
$ git branch --unset-upstream
Dies ist für Git v.1.8.0 oder neuer verfügbar. (Quellen: 1.7.9 Ref, 1.8.0 Ref)
Wenn Sie den aktuellen Zweig nicht entfernen möchten, gehen Sie einfach wie folgt vor: git branch --unset-upstream [branchname]
– Sonate
19. Oktober 2016 um 8:36 Uhr
Sieht so aus, als wäre das neu. Etwas mehr Infos wären schön. ZB Version der Einleitung.
– ManuelSchneid3r
6. Januar 2017 um 2:24 Uhr
Sicher, Sie können gerne antworten, wenn Sie es herausfinden, und ich werde den Kommentar gerne aktualisieren
– Yoshua Wuyts
7. Januar 2017 um 12:21 Uhr
Hm, ich bekomme fatal: 'origin/master' does not appear to be a git repository fatal: Could not read from remote repository. nachdem Sie dies getan und einen Git-Pull-Origin/Master versucht haben
– Informationsaustausch
13. August 2018 um 15:51 Uhr
Dobes Vandermeer
So entfernen Sie die Zuordnung zwischen dem lokalen und dem Remote-Zweig:
Löschen Sie optional den lokalen Zweig danach, wenn Sie ihn nicht benötigen:
git branch -d <branch>
Dadurch wird der Remote-Zweig nicht gelöscht.
git branch -d <branch> ist nicht erforderlich, um die Zuordnung zu entfernen.
– Marco
11. März 2013 um 15:27 Uhr
Ich benutze JIRA. Wenn ich erneut ziehe, erscheint der Zweig. Wie kann ich das verhindern?
– Pulver366
13. Januar 2015 um 13:42 Uhr
@Marco Richtig, aber wenn Sie verwenden git branch -vv Sie werden immer noch die alten Zweige sehen, bis Sie dies tun git branch -d <branch>.
– Selten ‘Wo ist Monica’ Needy
13. Februar 2016 um 8:01 Uhr
@powder366 Abhängig von Ihren Einstellungen, git pull darf greifen alle Remote-Zweige und fügen Sie alle neu hinzu, von denen er annimmt, dass sie auf Remote “erschienen” sind. Sie können dieses Verhalten “alle Zweige ziehen” ändern, indem Sie Folgendes tun git config [--global] push.default simple oder git config [--global] push.default current. Mehr dazu push.default Hier.
– Selten ‘Wo ist Monica’ Needy
13. Februar 2016 um 8:10 Uhr
@SeldomNeedy Ich denke, du vermisst vielleicht den Sinn eines DVCS? Der Punkt ist, dass ich einen Zweig haben kann, der damit beginnt, einen Upstream-Zweig zu verfolgen, aber dass ich ihn abtrenne, um einen Ansatz zu verfolgen, den der Upstream-Zweig nicht verwendet. In diesem Fall ist der Zweig weder “alt” (weil ich ihn noch entwickle) noch “nicht mehr verwendet” (weil ich ihn verwende). Dies ist ein großer Teil des Designs eines DVCS. Macht das Sinn?
– Marco
16. Februar 2016 um 14:00 Uhr
Der einfachste Weg ist die Bearbeitung .git/config
Löschen Sie die Zeile merge = refs/heads/test1 in dem test1 Zweigstelle
CletusW
Sie können den Remote-Tracking-Zweig mit löschen
git branch -d -r origin/<remote branch name>
wie VonC oben erwähnt. Wenn Sie jedoch Ihre lokale Kopie des Zweigs behalten, git pushwird immer noch versuchen, diesen Zweig zu schieben (was zu einem Non-Fast-Forward-Fehler führen könnte, wie es bei ruffin der Fall war). Das liegt daran, dass die config push.default standardmäßig auf matching was bedeutet:
matching – pushe alle passenden Zweige. Alle Zweige mit demselben Namen an beiden Enden werden als übereinstimmend betrachtet. Dies ist die Standardeinstellung.
Da dies wahrscheinlich nicht das war, was Sie wollten, als Sie den Remote-Tracking-Zweig gelöscht haben, können Sie dies festlegen push.default zu upstream (oder tracking wenn du git < 1.7.4.3 hast)
Upstream – schiebt den aktuellen Zweig zu seinem Upstream-Zweig.
verwenden
git config push.default upstream
und git wird aufhören zu versuchen, Branches zu pushen, die Sie “aufgehört haben zu verfolgen”.
Notiz: Die einfachere Lösung wäre, Ihre lokale Niederlassung einfach in etwas anderes umzubenennen. Das würde auch ein gewisses Verwechslungspotential beseitigen.
Local-Tracking-Zweige
Wenn Sie über lokale Niederlassungen sprechen (z main, dev), die konfiguriert sind push-zu und pull-von einem stromaufwärts [remote branch]dann kannst du das deaktivieren mit:
❯ git branch --unset-upstream <LOCALBRANCH>
Z.B:
❯ git branch --unset-upstream dev
❯ git branch --unset-upstream feature-x
Remote-Tracking-Filialen
Wenn Sie über Zweige des Namens sprechen <REMOTE>/<BRANCH> (z.B origin/main, origin/dev), die in Ihrem angezeigt werden git log (und .git/refs/remotes/<REMOTE>/ Verzeichnis), das Ihnen den Status eines Remote-Zweigs anzeigt, dann können Sie das “Tracken” (Aktualisieren) beenden, indem Sie die aktuelle Liste der gehaltenen Remote-Tracking-Zweige mit Ihrer eigenen neuen benutzerdefinierten Liste überschreiben:
Wenn Sie diese Remote-Tracking-Zweige außerdem nicht mehr in Ihrem sehen möchten git log (und .git/refs/remotes/<REMOTE>/ Verzeichnis), dann können Sie sie entfernen mit:
# keep tracking `origin/main`, and `origin/dev`,
# untrack all other `origin/*` remote branches
❯ git remote set-branches origin main dev
# delete remote branches previously tracked, from the
# `.git/refs/remotes/<REMOTE>/` directory
❯ git branch --delete --remotes -- origin/feature-x origin/feature-y
❯ git branch --delete --remotes -- origin/hotfix-z
Veraltete Remote-Zweige
Wenn schließlich entfernte Zweige aus dem entfernten Repository selbst entfernt wurden (veraltet sind) und Sie Ihr lokales Repository aktualisieren möchten, um dies widerzuspiegeln, können Sie sie löschen (prunen):
Sie können den Status des Trackings überprüfen mit:
❯ git remote show <REMOTE>
Z.B:
❯ git remote show origin
* remote origin
Fetch URL: /Users/johndoe/bare-remote
Push URL: /Users/johndoe/bare-remote
HEAD branch: ant
Remote branches:
brooms tracked
bull tracked
cat tracked
deer tracked
dog tracked
foxy tracked
john tracked
master tracked
new tracked
tim tracked
timothy tracked
Local branches configured for 'git pull':
ant merges with remote ant
master merges with remote master
Local refs configured for 'git push':
ant pushes to ant (up to date)
master pushes to master (up to date)
git-remote(1):
set-branches: Ändert die Liste der Zweige, die von der benannten Fernbedienung verfolgt werden. Dies kann verwendet werden, um eine Teilmenge der verfügbaren Remote-Zweige nach der anfänglichen Einrichtung für eine Remote zu verfolgen.
prune: Löscht veraltete Referenzen, die mit verknüpft sind. Standardmäßig werden veraltete Remote-Tracking-Zweige unter gelöscht, aber abhängig von der globalen Konfiguration und der Konfiguration der Remote können wir sogar lokale Tags löschen, die nicht dorthin gepusht wurden.
show: Gibt einige Informationen über die Fernbedienung .
Git-Zweig(1):
--unset-upstream: Entfernen Sie die Upstream-Informationen für .
--delete: Einen Zweig löschen.
--remotes: Auflisten oder Löschen (falls mit -d verwendet) der Remote-Tracking-Zweige.
Danny Köpping
Hier ist ein Einzeiler, um alle Remote-Tracking-Zweige zu entfernen, die einem Muster entsprechen:
Wenn nur Remote-Tracking-Zweige nicht verfolgt (gelöscht) werden sollen, ist dies meiner Meinung nach eine kürzere einzeilige Alternative: git branch -r -D $(git branch -r | grep -v "master")
– dma_k
3. Oktober 2018 um 12:50 Uhr
9686500cookie-checkWie stoppt man die Nachverfolgung eines Remote-Zweigs in Git?yes