Pytanie Jak usunąć nieprawidłowe odwołanie do gałęzi zdalnej z Git?


W moim bieżącym repo mam następujące wyniki:

$ git branch -a
* master
  remotes/origin/master
  remotes/public/master

Chcę usunąć remotes/public/master z listy oddziału:

$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.

Ponadto wyjście z git remote jest dziwne, ponieważ nie ma na liście public:

$ git remote show 
origin

Jak mogę usunąć "piloty / public / master" z listy oddziałów?

Zaktualizuj, wypróbuj git push dowództwo:

$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

661
2017-07-02 02:39


pochodzenie


Zrobił git remote prune [remote-name] lub git fetch -p [remote-name] nie działa w twoim scenariuszu? Zrób to z git gc jest o wiele bardziej potężny niż zwykle jest potrzebny. - rjmunro
git remote prune [remote-name] nie będzie działać z git svn, chociaż tak się nie dzieje git gc... git branch -rd origin/name działa jednak. @ Casey, prawdopodobnie powinieneś wybrać drugą odpowiedź - to trochę mniej niebezpieczne. - naught101
Uwielbiam to pytanie. Wracamy prawie co miesiąc - oluckyman
Powiązane, jeśli nie cel dupe: Usuń gałąź Git lokalnie i zdalnie.
Aby uniknąć błędu gitter'a n00b w przyszłości, polecam użycie innej przykładowej gałęzi niż master... szczególnie podczas usuwania na pilocie. - absynce


Odpowiedzi:


Być może potrzebujesz czyszczenia

git gc --prune=now

lub możesz potrzebować przycinania

git remote prune public

suszona śliwka

Usuwa wszystkie nieaktualne gałęzie śledzenia w obszarze <nazwa>. Te nieaktualne gałęzie zostały już usunięte ze zdalnego repozytorium, do którego odnosi się <nazwa>, ale nadal są dostępne lokalnie w "pilotach / <nazwa>".

Używając opcji --dry-run, zgłoś, które gałęzie będą przycinane, ale w rzeczywistości ich nie przycinaj.

Wygląda jednak na to, że wcześniej należało je wyczyścić

git remote rm public 

rm

Usuń pilota o nazwie <nazwa>. Wszystkie zdalne gałęzie śledzenia i ustawienia konfiguracyjne dla pilota              są usunięte.

Może to być ręczne edytowanie pliku konfiguracyjnego, co nie miało miejsca lub występują problemy z uprawnieniami.

Może znowu to uruchomisz i zobacz, co się stanie.

Porada dotycząca kontekstu

Jeśli spojrzysz w dzienniki wersji, zauważyliście, że zasugerowałem więcej "poprawnych" technik, które z jakiegokolwiek powodu nie chciały pracować na swoim repozytorium.

Podejrzewałem, że OP zrobił coś, co pozostawiło ich drzewo w niespójnym stanie, który spowodował, że zachowywał się nieco dziwnie, i git gc był zobowiązany do naprawienia pozostawionego za cruftem.

Zazwyczaj  git branch -rd origin/badbranch jest wystarczający do nukowania lokalnego oddziału śledzenia, lub git push origin :badbranch za niszczenie odległego oddziału, oraz zazwyczaj będziesz nigdy musisz zadzwonić git gc


666
2017-07-02 02:42



Nie chcę usuwać gałęzi po stronie zdalnej. Myślę, że istnieje subtelna różnica. - cmcginty
Pytanie brzmi: "Jak usunąć zdalny oddział". To są te ścieżki. - Kent Fredric
Zmienię temat na inny, jeśli to wyjaśni, o co proszę, ale polecenie pokazuje dokładnie, jaki jest mój problem. - cmcginty
git gc nie jest tu potrzebny, ale git remote prune sprawia, że ​​czuję się bezpieczniejszy niż ręczne usuwanie rzeczy git branch -rd, ponieważ git sprawdza, które zdalne gałęzie są wykonywane. - MikeSep
to nie działało dla mnie - jednak "git branch -rd" działało dobrze. - dsummersl


Wszystko, co musisz zrobić, to

git fetch -p

Usunie wszystkie twoje lokalne oddziały, które są zdalnie usuwane.

Jeśli jesteś na git 1.8.5+ możesz ustawić to automatycznie

git config fetch.prune true

lub

git config --global fetch.prune true

628
2017-11-24 10:38



Tego też szukałem - pytanie opisuje scenariusz bardziej skomplikowany niż ten powszechny. - rjmunro
Szukam sposobu na usunięcie lokalnych oddziałów, w których odpowiedni pilot został usunięty, ale to nie działa dla mnie. Każdy pomysł, dlaczego? - jackocnr
Spowoduje to usunięcie gałęzi wymienionych w zdalnym / źródłowym, ale nie usuwa lokalnych oddziałów śledzących, co jest równie ważne. - BlueRaja - Danny Pflughoeft
@Cupcake Ponieważ nie cofnąłeś mojej pierwszej edycji (która naprawiła niepoprawne informacje o Git 1.8.5+), teraz zrobiłeś to niepoprawnie. Moja druga edycja polegała na poprawieniu tego, co wstawiłem, co było niepoprawne, co jest teraz ponownie (po wycofaniu). Proszę, cofnij jeszcze jedną edycję, aby mieć oryginał. Dzięki. - ferventcoder
@ferventcoder Podwójnie sprawdziłem twoją ostatnią edycję i powróciłem do niej. OP może ponownie wycofać, jeśli mu się nie podoba. Dzięki.


git push public :master

Spowoduje to usunięcie nazwy oddziału zdalnego master jak zauważył Kent Fredric.

Aby wyświetlić listę oddziałów śledzenia zdalnego:

git branch -r

Aby usunąć gałąź śledzenia zdalnego:

git branch -rd public/master

308
2017-07-02 02:47



git branch -rd działa dla mnie - Alexander Beletsky
Pomogło mi to usunąć zdalną gałąź Git-Svn. - Nick
git branch -rd removed_remote/branch pracował dla mnie, podczas gdy git gc --prune=now był bezwartościowy. - rchampourlier
Byłem w stanie użyć git prune bez żadnych problemów, ale mój współpracownik, który rozwidla nasze główne repo ** COULD ONLY ** użyj git branch -rd public/masterstylowe rozwiązanie do czyszczenia jego środowiska. - Abel
git branch -rd public/master było to, czego mi brakowało. miałem heroku/master i herkou/master ... lol woops - Aaron


Wszystko, co musisz zrobić, to

$ git branch -rd origin/whatever 

To takie proste. Nie ma powodu, aby dzwonić do gc tutaj.


152
2017-07-07 20:59



jak "wypchnąć" to usunięcie do githuba? - Thufir
@Thufir Nie chodzi o to pytanie. To pytanie dotyczyło sytuacji, w których w lokalnym repozytorium znajduje się niepoprawny zdalny odnośnik, ale ta gałąź nie istnieje już na serwerze zdalnym. Odpowiedź na twoje pytanie to $ git push origin: cokolwiek - jpswain
Jeśli masz duże zadanie oczyszczania (wiele zwisających pilotów), możesz po prostu usunąć wszystkie zdalne gałęzie z czymś podobnym git branch -rd $(git branch -r) następnie przywróć prawidłowe, wykonując pobieranie. - nobar
Hej, to właściwa odpowiedź. Miły. Dziękuję Ci. - trisweb
ta odpowiedź jest  popraw jeden ... poważnie - abbood


git gc --prune=now nie jest to, czego chcesz.

git remote prune public

lub git remote prune origin # jeśli to jest zdalne źródło

jest to, czego chcesz


69
2018-06-08 18:18



Dlaczego, jaka jest różnica? - cmcginty
@ Casey $ git gc # robi jak defragmentacja plików git, aby przyspieszyć repozytorium $ git remote prune origin # usunie stare gałęzie zdalne, które pojawiają się w "git branch -r | grep origin". O to właśnie pytam, wierzę. Tak więc polecenia są zupełnie inne. - tongueroo


Przyjęta odpowiedź nie zadziałała, gdy ref był spakowany. To jednak robi:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public

28
2018-01-12 04:21



To działało również dla mnie! - Nick
Pracował dla mnie. Zwykła gałąź git -d nie działała, zwrócił błąd, że gałąź nie istnieje, ponieważ usunąłem początkowe pochodzenie "original", które zostało utworzone przez pomyłkę, bezpośrednio w pliku .git / config. - micrub
Jest to metoda, której musiałem użyć, aby usunąć gałęzie, które zostały nieumyślnie pominięte w mojej .git / config (która musiała zostać przebudowana z powodu niespokrewnionego uszkodzenia). Szkoda, że ​​ta odpowiedź była tak głęboka, że ​​nie zauważyłem jej, aż w końcu znalazłem rozwiązanie i poszedłem dodać ją do zaakceptowanej odpowiedzi! - taranaki
Właśnie tego potrzebowałem po użyciu svn2git. Było dużo oddziałów pilotów / svn / *. Najpierw musiałem stworzyć fałszywego pilota "svn". - Sam


W moim przypadku próbowałem usunąć wpisy, które zostały zapisane .git/packed-refs. Możesz edytować ten zwykły plik tekstowy i usuwać z niego wpisy git br -D nie wie, jak dotykać (przynajmniej w wersji 1.7.9.5).

Znalazłem to rozwiązanie tutaj: https://stackoverflow.com/a/11050880/1695680


7
2017-12-01 23:47



wow, to mi pomogło. Mój kolega spróbował, zrestartuj VS, uruchom ponownie swój komputer, nic nie działało, usunął lokalne repozytorium i wyciągnął wszystko, żeby się tego pozbyć :) - Esen
Dzisiaj pochyliłem się, że ten plik z zapisem plików jest tworzony jako część git gc, kiedy zapakuje twoje zatwierdzenia do wysoko skompresowanego archiwum, przeniesie także odniesienia do pojedynczego pliku tekstowego, prawdopodobnie w celu optymalizacji; Mam nadzieję, że przyszłe wersje git mogą git br -D ...spakowane informacje. - ThorSummoner


git push origin --delete <branch name>

Przywoływany od: http://www.gitguys.com/topics/adding-and-removing-remote-branches/


4
2017-10-02 18:28





Miałem podobny problem. Żadna z odpowiedzi nie pomogła. W moim przypadku miałem dwa usunięte zdalne repozytoria wyświetlane na stałe.

Ostatnim moim pomysłem było ręczne usunięcie wszystkich odnośników.

Powiedzmy, że repozytorium nazywa się "Repo". Zrobiłem:

find .git -name Repo

i usunięto odpowiednie pliki i katalogi

grep Repo -r .git

Znalazłem kilka plików tekstowych, w których usunąłem odpowiednie wiersze. Teraz wszystko wydaje się być w porządku.

Zwykle powinieneś zostawić tę pracę, by git.


2
2018-02-26 10:20





Nie wiedziałem o tym git branch -rd, więc sposób, w jaki rozwiązałem takie problemy, to traktować moje repozytorium jako zdalne repozytorium i wykonać zdalne usuwanie. git push . :refs/remotes/public/master. Jeśli inne sposoby nie działają i masz jakiś dziwny odnośnik, którego chcesz się pozbyć, ten surowy sposób jest pewny. Daje to dokładną precyzję, aby usunąć (lub stworzyć!) Dowolny rodzaj odniesienia.


2
2018-05-08 23:14





Tylko nieznacznie powiązane, ale nadal może być pomocne w tej samej sytuacji, co my - używamy sieciowego udziału plików dla naszego zdalnego repozytorium. W zeszłym tygodniu wszystko działało, w tym tygodniu dostaliśmy błąd "Zdalne źródło nie anonsowało Ref dla oddziału refs / heads / master. Ref może nie istnieć w pilocie lub może być ukryty przez ustawienia uprawnień"

Ale wierzyliśmy, że nic nie zostało zrobione, aby zepsuć rzeczy. System plików NFS wykonuje migawki, dlatego sprawdzałem każdą "poprzednią wersję" i widziałem, że trzy dni temu rozmiar MB w repozytorium spadł z 282 MB do 33 MB, a obecnie istnieje około 1 403 nowych plików i 300 folderów. Zapytałem moich współpracowników i jeden próbował tego dnia popchnąć - potem anulował.

Użyłem funkcji "Przywróć", aby przywrócić ją na krótko przed tą datą i teraz wszystko znowu działa dobrze. Próbowałem prune wcześniej, nie wydawało się pomóc. Może ostrzejsze porządki by zadziałały.

Mam nadzieję, że to pomoże komuś jeszcze jednego dnia!

Sójka


1
2018-01-13 18:37