Wie stoppt man die Nachverfolgung eines Remote-Zweigs in Git?

Lesezeit: 9 Minuten

Wie stoppt man die Nachverfolgung eines Remote Zweigs in Git
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?

Wie stoppt man die Nachverfolgung eines Remote Zweigs in Git
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:

git config --unset branch.<branch>.remote
git config --unset branch.<branch>.merge

Entfernen Sie die Upstream-Informationen für <branchname>.
Wenn keine Verzweigung angegeben ist, wird standardmäßig die aktuelle Verzweigung verwendet.

(git 1.8+, Okt. 2012, b84869e übergeben durch Carlos Martín Nieto (carlosmn))

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

1646679493 688 Wie stoppt man die Nachverfolgung eines Remote Zweigs in Git
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)

Quelle

  • Hätte die gewählte Antwort sein sollen.

    – Kaiser

    12. Juni 2015 um 14:07 Uhr

  • 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

1646679494 110 Wie stoppt man die Nachverfolgung eines Remote Zweigs in Git
Dobes Vandermeer

So entfernen Sie die Zuordnung zwischen dem lokalen und dem Remote-Zweig:

git config --unset branch.<local-branch-name>.remote
git config --unset branch.<local-branch-name>.merge

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

Hier ist eine Beispieldatei

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        url = [email protected]:repo-name
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "test1"]
        remote = origin
        merge = refs/heads/test1
[branch "master"]
        remote = origin
        merge = refs/heads/master

Löschen Sie die Zeile merge = refs/heads/test1 in dem test1 Zweigstelle

Wie stoppt man die Nachverfolgung eines Remote Zweigs in Git
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 push wird 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.

(sehen http://git-scm.com/docs/git-config unter push.default)

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:

❯ git remote set-branches <REMOTE> [<REMOTE-BRANCH> …]

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:

❯ git branch --delete --remotes -- <REMOTE>/<BRANCH>
Deleted remote-tracking branch <REMOTE>/<BRANCH> (was 1f1a655).

Z.B:

# 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):

# automatically
❯ git remote prune <REMOTE>
Pruning <REMOTE>
URL: <REMOTEURL>
 * [pruned] <REMOTE>/<BRANCH>

…oder

# manually
❯ git branch --delete --remotes -- <REMOTE>/<BRANCH>
Deleted remote-tracking branch <REMOTE>/<BRANCH> (was 1f1a655).

PS

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.

1646679495 774 Wie stoppt man die Nachverfolgung eines Remote Zweigs in Git
Danny Köpping

Hier ist ein Einzeiler, um alle Remote-Tracking-Zweige zu entfernen, die einem Muster entsprechen:

git branch -rd $(git branch -a | grep '{pattern}' | cut -d"https://stackoverflow.com/" -f2-10 | xargs)

  • 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


968650cookie-checkWie stoppt man die Nachverfolgung eines Remote-Zweigs in Git?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy