2012-04-24 11 views
129

Próbuję usunąć zdalnego git oddział zPrzy usuwaniu zdalnego git oddział "błąd: nie można wcisnąć do bezwarunkowego przeznaczenia"

git push origin :my_remote_branch 

i uzyskiwanie:

error: unable to push to unqualified destination: my_remote_branch 
The destination refspec neither matches an existing ref on the remote nor 
begins with refs/, and we are unable to guess a prefix based on the source ref. 
error: failed to push some refs to '[email protected]:/myrepo' 

to mój obecny Oddziały

git branch -a 
* develop 
    master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/develop 
    remotes/origin/my_remote_branch 

git branch -r --merged 
    origin/HEAD -> origin/master 
    origin/develop 
    origin/master 

Wszelkie pomysły na to, jak mogę się pozbyć tej gałęzi, będą mile widziane.

+0

Czy spróbować 'git fetch'to zobaczyć, czy to ustalone, że nieistniejącą nazwę zdalnego? Czy próbujesz wejść do pliku '.git \ refs \ remote \ origin 'i usunąć plik' my_remote_branch', aby sprawdzić, czy to wystarczy? – VonC

+0

zrobiłeś 'git fetch', ale to nie pomogło. Postaram się znaleźć bardziej proste rozwiązanie, zanim spróbuję ręcznie usunąć plik. – Hugo

+0

spróbuj usunąć lub przynajmniej przenieś ten plik: zawiera tylko SHA1 końcówki tej gałęzi. – VonC

Odpowiedz

255

Fakt, że refs/remotes/origin/my_remote_branch istnieje w lokalnym repozytorium, nie oznacza, że ​​refs/heads/my_remote_branch istnieje w zdalnym repozytorium origin.

Wykonaj git fetch -p origin, aby usunąć refs/remotes/origin/my_remote_branch, jeśli jest już usunięta. Opcja -p mówi, że pobieranie powoduje usunięcie wszystkich gałęzi śledzenia, które nie istnieją już w odpowiednich pilotach; domyślnie są trzymane w pobliżu.

+10

'git fetch -p origin' naprawił to dla mnie. Wielkie dzięki. – redimp

+2

To działało również dla mnie. – Deviljho

+2

Dobra odpowiedź !!!! – jwjin

54

Znaleziony pytanie cleaning up old remote git branches i to załatwiło sprawę

git branch -r -d origin/my_remote_branch 
+0

Próbowałem zrobić to dokładnie od około godziny, dziękuję bardzo! – sebkkom

+0

Nie powoduje to usunięcia oddziału zdalnego. Jeśli pójdziesz na git-fetch, znowu zobaczysz gałąź. Po prostu usuwa go z lokalnej listy zdalnych oddziałów. –

+2

@PatrickDesjardins dokładnie 'git push origin: my_remote_branch' usuwa gałąź ze zdalnego i' git branch -r -d origin/my_remote_branch' usuwa ją z mojej lokalnej listy odległych oddziałów – Hugo

3
git branch -r -d origin/my_remote_branch 

nie było wystarczająco dużo dla mnie. Przed miałem iść do serwera i pracować z katalogu git bezpośrednio (co jest niebezpieczne i brzydkie), aby usunąć oddziału:

ssh mygitserver 
su - git 
cd /home/git/repositories/my_remote_branch.git/ 
git --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch 
+0

To nie tylko niebezpieczne i brzydkie, ale także _wrong_. Po pierwsze, to pytanie dotyczy usuwania lokalnego oddziału, gdy jest ono usuwane na zdalnym serwerze. A dla drugiego usunięcie gałęzi ze zdalnego jest tylko kwestią 'git push origin: my_remote_branch'. Uważaj na okrężnicę. –

+0

Masz rację Jan, że 'git push origin: my_remote_branch' jest normalnym sposobem. Ten brzydki i niebezpieczny sposób ma miejsce, gdy to nie działa (np. Z powodu źle skonfigurowanego git). – pevik

11

natknąłem to podczas próby usunięcia zdalnej gałęzi, które zostały już usunięte. Wszystko, co było potrzebne było prune:

git remote prune origin 
0

miał ten sam problem, ręcznie edytowane mój plik ./.git/config obejmuje:

[branch "branchName"] 
remote = origin 
merge = refs/heads/branchName 

co doprowadziło do: error: src refspec branchName matches more than one. ten Naprawiłem uruchamiając $git tag -d branchName. Po czym udało mi się przesunąć nową gałąź do wyższego poziomu.

0

Mam podobny problem. Najpierw poszedłem do tej dyskusji, jednak nie mogłem rozwiązać problemu, dopóki nie zobaczyłem https://stackoverflow.com/a/32147743/4209849.

który po prostu doda wskazówkę dotyczącą rozróżniania origin/my-branch-name i my-branch-name.

być szczegółowe, należy użyć:

git push origin :my_remote_branch 

zamiast

git push origin :origin/my_remote_branch 

to rozwiązać mój problem przynajmniej nadzieję, że to pomoże innym także.

3

Spróbuj następujące dwie opcje, aby usunąć zdalną gałąź przymusowo

Wariant 1

get push origin --delete <branchName> 

Wariant 2

git fetch -p origin 
git branch -r -d origin/<branchName> 
1

Dla mnie problemem było to, że to była moja domyślna gałąź na github. Zmieniłem domyślną gałąź, a następnie operacja usunięcia zakończyła się pomyślnie.

Nadzieja pomaga komuś

Powiązane problemy