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?
Wie in Yoshua Wuyts ' Antwort erwähnt, mit git branch
:
git branch --unset-upstream
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ürmaster
im RepoOrigin
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.
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.
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
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 Push
immer 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.
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)
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
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.