wake-up-neo.com

Wie hört man auf, einen entfernten Zweig in Git zu verfolgen?

Wie hört man auf, einen entfernten Zweig in Git zu verfolgen?

Ich bitte darum, das Tracking zu beenden, weil ich in meinem konkreten Fall den lokalen Zweig löschen möchte, den entfernten jedoch nicht. Wenn Sie den lokalen Zweig löschen und den Löschvorgang auf Remote setzen, wird auch der Remote-Zweig gelöscht:

Kann ich einfach git branch -d the_branch tun, und es wird nicht weitergeleitet, wenn ich später git Push gehe? 

Wird es sich nur weiter verbreiten, wenn ich später git Push Origin :the_branch ausführen würde?

446
Jason Cohen

Wie in Yoshua Wuyts ' Antwort erwähnt, mit git branch :

git branch --unset-upstream

Andere Optionen:

Sie müssen Ihre Zweigstelle nicht löschen.

Löschen Sie einfach Ihren Remote-Tracking-Zweig:

git branch -d -r Origin/<remote branch name>

(Dieses wird nicht den Zweig auf dem Remote-Repo löschen !)

Siehe " Schwierige Verständigung mit git-fetch "

es gibt kein solches Konzept für lokale Tracking-Filialen, nur Remote-Tracking-Filialen.
Origin/master ist also ein entfernter Tracking-Zweig für master im Repo Origin

Wie in Dobes Vandermeer 's answer erwähnt, müssen Sie auch die Konfiguration des Zweigs local zurücksetzen:

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

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

(git 1.8+, Okt. 2012, begehen b84869e von Carlos Martín Nieto (carlosmn) )

Dadurch wird jedem Push/Pull Origin/<remote branch name> nichts bekannt.

566
VonC

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

166
Yoshua Wuyts

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

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

Löschen Sie optional den lokalen Zweig, wenn Sie ihn nicht benötigen:

git branch -d <branch>

Der entfernte Zweig wird dadurch nicht gelöscht.

106

Am einfachsten ist es, .git/config zu bearbeiten.

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 im Zweigabschnitt test1

32

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, versucht git Pushimmer noch, diesen Zweig zu pushen (was zu einem Nicht-Fast-Forward-Fehler führen könnte, wie bei ruffin ). Dies liegt daran, dass die Konfig Push.default standardmäßig auf matching gesetzt ist. Dies bedeutet:

matching - Alle passenden Äste drücken. Alle Zweige, die an beiden Enden den gleichen Namen haben, werden als übereinstimmend betrachtet. Dies ist die Standardeinstellung.

(siehe http://git-scm.com/docs/git-config unter Push.default)

Da dies wahrscheinlich nicht das war, was Sie beim Löschen des Remote-Tracking-Zweigs wollten, können Sie Push.default auf upstream setzen (oder tracking, wenn Sie git <1.7.4.3 haben).

upstream - Schieben Sie den aktuellen Zweig in den Upstream-Zweig.

mit

git config Push.default upstream

und git hört auf zu versuchen, Zweige zu pushen, deren "Tracking aufgehört hat".

Hinweis: Die einfachere Lösung wäre, Ihren lokalen Zweig einfach in etwas anderes umzubenennen. Dies würde auch einige Verwirrungspotentiale beseitigen.

9
CletusW

Hier ist ein Einzeiler, um alle mit einem Muster übereinstimmenden Remote-Tracking-Zweige zu entfernen:

git branch -rd $(git branch -a | grep '{pattern}' | cut -d'/' -f2-10 | xargs)

3
infomaniac

Dies ist keine Antwort auf die Frage, aber ich konnte nicht herausfinden, wie man in einem Kommentar oben eine anständige Code-Formatierung erhält ... also Auto-Down-Reputation-hier ist mein Kommentar.

Ich habe das Rezept von @Dobes in einem schicken Shmancy [Alias] -Eintrag in meiner .gitconfig-Datei gespeichert:

# to untrack a local branch when I can't remember 'git config --unset'
cbr = "!f(){ git symbolic-ref -q HEAD 2>/dev/null | sed -e 's|refs/heads/||'; }; f"
bruntrack = "!f(){ br=${1:-`git cbr`};  \
    rm=`git config --get branch.$br.remote`; \
    tr=`git config --get branch.$br.merge`; \
    [ $rm:$tr = : ] && echo \"# untrack: not a tracking branch: $br\" && return 1; \
    git config --unset branch.$br.remote; git config --unset branch.$br.merge; \
    echo \"# untrack: branch $br no longer tracking $rm:$tr\"; return 0; }; f"

Dann kann ich einfach rennen

$ git bruntrack branchname
1
qneill

git branch --unset-upstream stoppt die Verfolgung aller lokalen Zweigstellen, was nicht wünschenswert ist.

Entfernen Sie den Abschnitt [branch "branch-name"] aus der Datei .git/config, gefolgt von 

git branch -D 'branch-name' && git branch -D -r 'Origin/branch-name' 

klappt das Beste für mich.

0
Bob