2012-09-05 3 views
5

Wenn ich branch -a ausführen:Löschen einer Remote-Zweig

$ git branch -a 
* master 
remotes/origin/HEAD -> origin/master 
remotes/origin/hello 
remotes/origin/master 

Und dann entferne ich den Zweig:

$ git branch -r -D origin/hello 
Deleted remote branch origin/hello (was c0cbfd0). 

Jetzt sehe ich, Wurde entfernt. Aber wenn ich holen:

$ git fetch 
From localhost:project 
* [new hello]  hello  -> origin/hello 

$ git branch -a 
* master 
remotes/origin/HEAD -> origin/master 
remotes/origin/hello 
remotes/origin/master 

Ich bin so verwirrt.
Ich denke, es wurde entfernt, aber es ist immer noch da.

Antwort

6

Sie müssen es von der Fernbedienung mit dem folgenden Befehl entfernen:

git push origin --delete hello 

Wenn Sie git branch -rd origin/hello laufen Sie nur Ihre lokale Niederlassung zu löschen. Der obige Code entfernt es aus dem Ursprungsrepo.

3

Um delete a remote branch verwenden

git push origin :remotebranch 

Alles andere nur auf dem lokalen Repository arbeitet. In neueren Versionen von git, können Sie auch

git push origin --delete remotebranch 

Gemäß den documentation bedeuten --delete die gleichen „wie alle Refs mit einem Doppelpunkt vorangestellt wird“. Wenn Sie sich über die Bedeutung von : wundern, folgt es der Standardsyntax für . Normalerweise würden Sie

git push origin localbranch:remotebranch 

schreiben, aber hier, ersetzen Sie localbranch mit „nichts“, effektiv die Remote-Zweig zu löschen.

0
git push origin --delete somebranch 

ist die Art, wie Sie eine Remote-Zweig löschen. Wenn Sie immer noch auf einer alten Version von Git sind, müssen Sie die alte Syntax:

git push origin :somebranch 

, die „durch Herkunft schieben nichts in somebranch auf der Fernbedienung darauf“ zu übersetzen. Der Befehl hat die Form "git push (was remote repo) (was für eine lokale Referenz) :(welche Fernreferenz). Das Auslassen (welche Referenz) wird interpretiert als" put nothing "(welche entfernte Referenz), effektiv löschen neuere Syntax ist viel intuitiver.

1

Beachten Sie, dass git Zweig erlaubt nur lokale Referenzen zum löschen.

git branch -r -D origin/hello 

dass nur die lokalen Zeiger, zu einem remote tracking branch löschen, aber das hat keinen Einfluss auf dem Remote-Repo-Inhalt selbst.
Nur die git push origin :hello, wie in den anderen Antworten erwähnt, würde das tun.

Plus, das ändert nicht die Konfig branch.hello.fetch: Es verweist immer noch auf Ursprung/Hallo, weshalb der nächste Abruf den Remote-Tracking-Zweig in Ihrem lokalen Repo neu erstellen wird.