Как удалить недопустимую ссылку на удаленную ветвь из 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   668   2009-07-02 06:39:41

11 ответов:

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

git gc --prune=now

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

git remote prune public

чернослив

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

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

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

git remote rm public 

rm

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

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

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

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

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

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

обычно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 # если это удаленный источник

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

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

$ 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 делает снимки, поэтому я рассмотрел каждую " предыдущую версию" и увидел, что три дня назад размер в МБ репозитория увеличился с 282 МБ до 33 Мб, и теперь существует около 1,403 новых файлов и 300 папок. Я спросил своих коллег, и один из них попытался сделать толчок в тот день, а затем отменил его.

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

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

Джей