Как удалить недопустимую ссылку удаленной ветви из 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 папок. Я спросил своих коллег, и один из них попытался сделать толчок в тот день, а затем отменил его.
Я использовал функцию "восстановить", чтобы восстановить его до этой даты, и теперь все снова работает нормально. Я пробовал чернослив раньше, похоже, не помог. Может быть, более жесткая уборка сработала бы.
надеюсь, что это может помоги однажды кому-нибудь другому!
Джей