2012-09-05 12 views
5

Kiedy wykonać branch -a:Usunięcie pilota oddziału

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

I wtedy usunąć oddziału:

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

Teraz widzę:

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

Oddział "hello" ma zostały usunięte. Ale kiedy sprowadzić:

$ 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 

Jestem tak zdezorientowany.
Myślę, że został usunięty, ale wciąż tam jest.

Odpowiedz

6

Musisz usunąć go z pilota za pomocą następującego polecenia:

git push origin --delete hello 

Kiedy używasz git branch -rd origin/hello usuwasz tylko z lokalnym oddziałem. Powyższy kod usuwa go z repozytorium pochodzenia.

3

Aby delete a remote branch, użyj

git push origin :remotebranch 

Wszystko inne działa tylko na lokalnym repozytorium. W nowszych wersji git, można również

git push origin --delete remotebranch 

Jak na documentation, --delete oznacza to samo „jak poprzedzenie wszystkie pozycje literatury z dwukropkiem”.

Jeśli zastanawiasz się nad znaczeniem nazwy :, jest ona zgodna ze standardową składnią dla push. Zazwyczaj byś napisać

git push origin localbranch:remotebranch 

ale tu wymienić localbranch z „niczego”, skutecznie usuwając zdalnego oddziału.

0
git push origin --delete somebranch 

to sposób usuwania zdalnej gałęzi. Jeśli nadal na starej wersji Git, może trzeba używać starej składni:

git push origin :somebranch 

co przekłada się na „push nic do somebranch na pilocie wskazywanego przez pochodzenie”. Polecenie ma postać "git push (które zdalne repo) (co lokalne odwołanie) :(które zdalne odwołanie). Pominięcie (które odwołanie) jest interpretowane jako" nie wkładaj "(które zdalne odwołanie), skutecznie usuwając je. nowsza składnia jest znacznie bardziej intuicyjne.

1

Zauważ, że git branch tylko pozwala na usuwanie lokalnych referencje.

git branch -r -D origin/hello 

to tylko usunąć lokalny wskaźnik do remote tracking branch, ale to nie ma wpływu na zdalna treść repo sama.
Tylko git push origin :hello, jak wspomniano w innych odpowiedziach, zrobiłoby to.

Co więcej, to nie zmienia konfiguracji branch.hello.fetch: nadal odwołuje się do origin/hello, dlatego następne pobranie ponownie utworzy gałąź zdalnego śledzenia w lokalnym repozytorium.

Powiązane problemy