Jak usunąć niepoprawne zdalne odniesienie do gałęzi z Gita?

W moim bieżącym repo mam następujące wyjście:

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

Chcę usunąć remotes/public/master z listy gałęzi:

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

Również wyjście git remote jest dziwne, ponieważ nie wymienia public:

$ git remote show 
origin

Jak mogę usunąć 'remotes / public/master' z listy gałęzi?

Update, próbowałem git push komendy:

$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Author: cmcginty, 2009-07-02

11 answers

You might be needed a cleanup

git gc --prune=now

Lub może potrzebujesz śliwki

git remote prune public

Śliwka

Usuwa wszystkie przestarzałe gałęzie śledzenia pod . Te stare gałęzie zostały już usunięte ze zdalnego repozytorium, do którego odwołuje się , ale nadal są dostępne lokalnie w " remotes / ".

Z opcją -- dry-run, Raportuj, które gałęzie zostaną przycinane, ale nie przycinaj ich.

Wydaje się jednak, że te powinien być wcześniej wyczyszczony

git remote rm public 

Rm

Usuń zdalny o nazwie . Wszystkie gałęzie zdalnego śledzenia i ustawienia konfiguracji dla zdalnego są usuwane.

Więc może to być ręcznie edytowany plik konfiguracyjny i to się nie stało, lub masz problemy z uprawnieniami.

Może powtórzymy to i zobaczymy, co się stanie.

Kontekst Porady

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

Podejrzewałem, że operacja zrobiła coś, co pozostawiło ich drzewo w niespójnym stanie, co spowodowało, że zachowało się trochę dziwnie i musiałem naprawić pozostawiony cruft.

Zwykle git branch -rd origin/badbranch jest wystarczająca do nukowania lokalnej gałęzi śledzącej lub git push origin :badbranch do nukowania zdalnej gałęzi i zazwyczaj będziesz nigdy nie musisz call git gc

 671
Author: Kent Fredric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:41

Wszystko, co musisz zrobić, to

git fetch -p
Usunie wszystkie lokalne oddziały, które zostaną zdalnie usunięte.

Jeśli korzystasz z git 1.8.5 + możesz ustawić to automatycznie

git config fetch.prune true

Lub

git config --global fetch.prune true
 633
Author: Pawan Maheshwari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-11 16:14:15
git push public :master

Usunęłoby to zdalną gałąź o nazwie master, Jak zauważył Kent Fredric.

Do listy gałęzi zdalnego śledzenia:

git branch -r

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

git branch -rd public/master
 309
Author: Alan Haggai Alavi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-02 02:58:06

All you need to do is

$ git branch -rd origin/whatever 
To takie proste. Nie ma powodu, by wzywać tu gc.
 153
Author: jpswain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-07 20:59:19

git gc --prune=now nie tego chcesz.

git remote prune public

Or git remote prune origin # if thats the remote source

Is what you want

 69
Author: tongueroo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-19 08:40:24

Zaakceptowana odpowiedź nie zadziałała dla mnie, gdy sędzia był spakowany. To jednak:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public
 28
Author: chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 04:21:17

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

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

 7
Author: ThorSummoner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:59
git push origin --delete <branch name>

Odwołany z: http://www.gitguys.com/topics/adding-and-removing-remote-branches/

 4
Author: kip2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 18:28:26

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.

Moim ostatnim pomysłem było ręczne usunięcie wszystkich odniesień do niego.

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

find .git -name Repo

I usunął odpowiednie pliki i katalogi

grep Repo -r .git

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

Zazwyczaj powinieneś zostawić to praca dla git.

 2
Author: Keinstein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-26 10:20:45

Nie wiedziałem o git branch -rd, więc sposób, w jaki rozwiązałem takie problemy dla siebie, polega na traktowaniu mojego repo jako zdalnego repo i zdalnym usuwaniu. git push . :refs/remotes/public/master. Jeśli inne sposoby nie działają i masz jakieś dziwne odniesienie, którego chcesz się pozbyć, ten surowy sposób jest pewny. Daje dokładną precyzję usuwania (lub tworzenia!) wszelkie odniesienia.

 2
Author: clacke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-08 23:14:17

Tylko trochę 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 otrzymaliśmy błąd " Remote origin Nie reklamował Ref dla gałęzi refs / heads / master. Ten Ref może nie istnieć w zdalnym lub może być ukryty za pomocą ustawień uprawnień "

Ale wierzyliśmy, że nic nie zostało zrobione, aby zepsuć rzeczy. NFS robi migawki więc przejrzałem każdą "poprzednią wersję" i zobaczyłem że trzy dni temu rozmiar w MB repozytorium zmalał z 282MB do 33MB, a teraz istniało około 1403 nowych plików i 300 folderów. Zapytałem moich współpracowników i jeden próbował zrobić push tego dnia - potem odwołał.

Użyłem funkcji "Przywróć", aby przywrócić ją do tuż przed tą datą i teraz wszystko działa dobrze ponownie. Próbowałem wcześniej śliwki, nie pomogło. Może ostrzejsze sprzątanie by zadziałało.

Hope this might help someone else one dzień!

Jay

 1
Author: JGlass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-13 18:37:01