Как удалить недопустимую ссылку удаленной ветви из Git?

в моем текущем РЕПО у меня есть следующий вывод:

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

Я хочу удалить remotes/public/master из списка филиал:

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

кроме того, вывод git remote странно, так как он не перечисляет public:

$ git remote show 
origin

Как удалить "remotes / public / master" из списка филиалов?

обновление, попробовал :

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

11 ответов


возможно, Вам понадобится очистка

git gc --prune=now

или вам может понадобиться чернослив

git remote prune public

чернослив

удаляет все устаревшие ветви отслеживания под . Эти устаревшие ветви уже удалены из удаленного репозитория, на который ссылается , но все еще локально доступны в "remotes/".

С опцией -- dry-run, сообщите, какие ветви будут обрезаны, но не обрезайте их.

однако, похоже, они должны были быть очищены раньше с

git remote rm public 

rm

удалите пульт с именем . Все удаленные ветки и настройки для удаленного удаляются.

так что это может быть вы вручную отредактировали файл конфигурации, и это не произошло, или у вас есть проблемы с привилегиями.

возможно, запустите это снова и посмотрите, что происходит.

Советы Контексте

если вы посмотрите в редакция-журналы, вы заметите, что я предложил более "правильные" методы, которые по какой-то причине не хотели работать над своим репозиторием.

Я подозревал, что ОП сделал что-то, что оставило их дерево в непоследовательном состоянии, что заставило его вести себя немного странно, и git gc потребовалось, чтобы исправить левый позади cruft.

обычно git branch -rd origin/badbranch is достаточно для подрыва местной ветви слежения, или git push origin :badbranch для бомбардировки удаленной ветки и обычно вы никогда нужно позвонить git gc


все, что вам нужно сделать, это

git fetch -p

он удалит все ваши локальные ветви, которые удаленно удалены.

Если вы находитесь на git 1.8.5+ вы можете установить это автоматически

git config fetch.prune true

или

git config --global fetch.prune true

git push public :master

это удалит удаленную ветку с именем master как указал Кент Фредрик.

список ветвей удаленного отслеживания:

git branch -r

чтобы удалить ветку удаленного отслеживания:

git branch -rd public/master

все, что вам нужно сделать, это

$ git branch -rd origin/whatever 

Это очень просто. Здесь нет причин вызывать gc.


git gc --prune=now Не то, что вы хотите.

git remote prune public

или git remote prune origin # если это удаленный источник

- это то, что вы хотите


принятый ответ не работал для меня, когда ref был упакован. Это делает, однако:

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

в моем случае я пытаюсь удалить записи, которые были сохранены в .git/packed-refs. Вы можете редактировать этот текстовый файл и удалять из него записи, которые git br -D не знает, как прикасаться (по крайней мере, в версии 1.7.9.5).

Я нашел это решение здесь: https://stackoverflow.com/a/11050880/1695680


git push origin --delete <branch name>

ссылка из: http://www.gitguys.com/topics/adding-and-removing-remote-branches/


у меня была похожая проблема. Ни один из ответов не помог. В моем случае у меня было два удаленных репозиториев появляться постоянно.

моей последней идеей было удалить все ссылки на него вручную.

допустим, репозиторий называется "РЕПО". Я:

find .git -name Repo

и удалить соответствующие файлы и каталоги

grep Repo -r .git

это нашло некоторые текстовые файлы, в которых я удалил соответствующие строки. Теперь, кажется, все штраф.

обычно вы должны оставить эту работу git.


Я не знаю, о git branch -rd, поэтому я решил такие проблемы для себя, чтобы рассматривать мое РЕПО как удаленное РЕПО и удаленное удаление. git push . :refs/remotes/public/master. Если другие способы не работают, и у вас есть какая-то странная ссылка, от которой вы хотите избавиться, этот сырой способ верен. Это дает вам точную точность, чтобы удалить (или создать!) любые ссылки.


только немного связано, но все еще может быть полезно в той же ситуации, что и у нас - мы используем сетевой файловый ресурс для нашего удаленного репозитория. На прошлой неделе все работало, на этой неделе мы получили ошибку " удаленный источник не рекламировал Ref для филиалов refs/heads / master. Эта ссылка может не существовать в удаленном или может быть скрыта настройками разрешений"

но мы считали, что ничего не было сделано, чтобы испортить вещи. NFS делает снимки, поэтому я рассмотрел каждую " предыдущую версию" и увидел, что три дня назад размер в МБ репозитория пошел от 282MB до 33MB, и теперь существует около 1,403 новых файлов и 300 папок. Я спросил своих коллег, и один из них попытался сделать толчок в тот день, а затем отменил его.

Я использовал функцию "восстановить", чтобы восстановить его до этой даты, и теперь все снова работает нормально. Я пробовал чернослив раньше, похоже, не помог. Может быть, более жесткая уборка сработала бы.

надеюсь, что это может помоги однажды кому-нибудь другому!

Джей