Git mówi, że zdalny odnośnik nie istnieje, gdy usuwam zdalną gałąź

130

Pobiegłem git branch -a

* master
  remotes/origin/test
  remotes/origin/master

Chcę usunąć moją zdalną gałąź

próbowałem

git push origin --delete remotes/origin/test

mam

błąd: nie można usunąć „zdalne / pochodzenie / test”: zdalny numer referencyjny nie istnieje

Jak to nie istnieje?

Zrobiłem git branch -ai widziałem to na liście.

Czy coś przegapiłem ?

cyber8200
źródło
1
git branch -awyświetli listę oddziałów w Twoim lokalnym, a nie zdalnym. Dobrze?
Myślę o nich wszystkich. Nie jestem pewien.
cyber8200
2
Pokaże zdalne oddziały w twoim lokalnym. Nie wyświetli wszystkich zdalnych gałęzi.
1
@peterh Wygląda na to, że naprawdę pyta „dlaczego nie mogę usunąć zdalnego oddziału” (prawdopodobnie gdy gałąź została usunięta ze zdalnego, ale zdalny numer referencyjny jest nadal obecny lokalnie) i dlatego nie jest duplikatem, ale można to zrobić z jaśniejszy tytuł
Andrew Spencer
1
Dokonałem edycji tytułu, mam nadzieję, że jest to bliższe intencji pytania
Andrew Spencer

Odpowiedzi:

259

Polecenie git branch -awyświetla zdalne gałęzie, które istnieją w lokalnym repozytorium . Może to zabrzmieć trochę zagmatwane, ale aby to zrozumieć, musisz zrozumieć, że istnieje różnica między zdalną gałęzią a gałęzią istniejącą w zdalnym repozytorium. Oddziały zdalne są lokalne które są mapowane na gałęzie zdalnego repozytorium. Zatem zestaw zdalnych gałęzi reprezentuje stan zdalnego repozytorium.

Zwykłym sposobem aktualizowania listy zdalnych oddziałów jest użycie git fetch . To automatycznie pobiera zaktualizowaną listę oddziałów ze zdalnego i konfiguruje zdalne gałęzie w lokalnym repozytorium, a także pobiera wszelkie obiekty zatwierdzenia, których możesz brakować.

Jednak domyślnie git fetchnie usuwa gałęzi zdalnych, które nie mają już gałęzi odpowiednika na zdalnym. Aby to zrobić, musisz jawnie skrócić listę zdalnych oddziałów:

git fetch --prune

Spowoduje to automatyczne usunięcie zdalnych gałęzi, które już nie istnieją na pilocie. Następnie git branch -rwyświetli zaktualizowaną listę oddziałów, które naprawdę istnieją na pilocie: I te, które możesz usunąć za pomocą git push.

Biorąc to pod uwagę, aby użyć git push --delete, musisz określić nazwę oddziału w zdalnym repozytorium; nie nazwa twojego zdalnego oddziału. Aby usunąć gałąź test(reprezentowaną przez twoją zdalną gałąź origin/test), użyj git push origin --delete test.

szturchać
źródło
git branch -r | grep "origin"Pomoże również przy dużych projektach wykorzystujących widelec
Seraf
Są więc dwa powody, dla których otrzymujesz tę wiadomość od gita: albo gałąź została już usunięta na serwerze, albo błędnie dodałeś przedrostek nazwy gałęzi remotes/origin/. Lub oba.
Andrew Spencer
136

Znaczenie remotes/origin/testjest takie, że masz gałąź wywołaną testna serwerze zdalnym origin. Więc polecenie byłoby

git push origin --delete test
drosam
źródło
25

Istnieje skrót do usunięcia gałęzi w źródle:

git push origin :<branch_name>

Co jest tym samym, co robienie git push origin --delete <branch_name>

Ricardo Magalhães
źródło
13
  1. pobierz listę zdalnych oddziałów
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. powinieneś otrzymać listę zdalnych oddziałów:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. teraz możemy usunąć oddział:
git push origin --delete deleteme
MovGP0
źródło
11

git push origin --delete yourBranch

Matheus Marsiglio
źródło
4

Biorąc pod uwagę, że zdalna gałąź to zdalne / pochodzenie / test, możesz użyć dwóch sposobów:

git push origin --delete test

i

git branch -D -r origin/test
Symeon Mattes
źródło
3

Poszedłem za rozwiązaniem przez szturchnięcie z niewielką korektą na końcu. Moje kroki następują
- git fetch --prune;
- git branch -adrukowanie następujących
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(zdalna gałąź do usunięcia)
- git push origin --delete branch.
Tutaj gałąź do usunięcia nie jest nazwana jako, remotes/origin/branchale po prostu branch. A gałąź jest usuwana.

Yanqi Huang
źródło
+1 dla komentarza w sprawie: nazwa oddziału, którą próbowałem usunąć, origin/branchkiedy powinno branch.
ken
1

git branch -a wyświetli listę oddziałów w twoim lokalnym, a nie oddziałów w twoim pilocie.

A błąd error: unable to delete 'remotes/origin/test': remote ref does not existoznacza, że ​​nie masz oddziału o tej nazwie na swoim pilocie, ale oddział istnieje w twoim lokalnym.


źródło
to jest pomocne. rozwiązało mój problem z usuwaniem. zastanawiam się, dlaczego „git push --delete origin / test” nie działa, podczas gdy „git push --delete test” działa
user10293779
1

Poręczna jedna linijka do usuwania gałęzi innych niż `` główne '' z pochodzenia:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

Zanim to zrobisz, upewnij się, że rozumiesz konsekwencje uruchomienia tego!

eddiewould
źródło
dzięki za ten kod! jest to jedyny kod git, który przetestowałem, działający nad usunięciem wszystkich zdalnych gałęzi oprócz master.
Alvin
1

Dla mnie to zadziałało $ ▶ git branch -D -r origin / mybranch

Detale

$ ▶ git branch -a | grep mybranch piloty / pochodzenie / mybranch

$ ▶ git branch -r | grep mybranch origin / mybranch

$ ▶ git branch develop * feature / pre-deployment

$ ▶ git push origin --delete mybranch błąd: nie można usunąć 'mybranch': zdalny odnośnik nie istnieje błąd: nie udało się przesłać niektórych odnośników do '[email protected]: config / myrepo.git'

$ ▶ git branch -D -r origin / mybranch Usunięto zdalny oddział / mybranch (poprzednio 62c7421).

$ ▶ git branch -a | grep mybranch

$ ▶ git branch -r | grep mybranch

Buggy B
źródło
-1
git push origin --delete origin/test 

powinno również działać

Sajal Choukse
źródło
2
Powinno to być git push origin --delete test
Andreas Presthammer,