Как удалить неверную ссылку на удаленную ветку из 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

How can I delete 'remotes/public/master' from the branch list?

Обнови, попробовалgit push команда:

$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
 user45681418 окт. 2015 г., 03:27
Связанные, если не двойная цель:Delete a Git branch both locally and remotely.
 naught10107 янв. 2015 г., 04:01
git remote prune [remote-name] не будет работать с git svn, хотя и не работаетgit gc... git branch -rd origin/name работает хотя. @Casey, вам, вероятно, следует выбрать второй ответ - он немного менее опасен.
 rjmunro06 дек. 2012 г., 13:11
Сделалgit remote prune [remote-name] или жеgit fetch -p [remote-name] не работает по вашему сценарию? Делать это сgit gc намного более силен, чем обычно требуется.
 oluckyman19 июн. 2015 г., 01:33
Мне нравится этот вопрос. Возвращаться почти каждый месяц
 absynce14 апр. 2016 г., 23:30
Во избежание появления ошибки n00b в будущем, я рекомендую использовать другой пример веткиmaster... особенно при удалении на пульте.

Ответы на вопрос(11)

Решение Вопроса

Возможно, вам нужна очистка

git gc --prune=now

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

git remote prune public

prune

Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".

With --dry-run option, report what branches will be pruned, but do no actually prune them.

Тем не менее, кажется, что они должны были быть очищены ранее с

git remote rm public 

rm

Remove the remote named <name>. All remote tracking branches and configuration settings for the remote are removed.

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

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

Advice Context

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

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

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

 cmcginty02 июл. 2009 г., 04:51
Я не хочу удалять ветку на удаленной стороне. Я думаю, что есть небольшая разница.
 cmcginty02 июл. 2009 г., 04:57
Я перефразирую тему, если это прояснит то, что я спрашиваю, но команда покажет, в чем именно заключается моя проблема.
 17 мая 2012 г., 05:28
у меня это не сработало - ветка git -rd работал нормально, однако.
 02 июл. 2009 г., 04:52
э-э, вопрос фактически задает вопрос «как удалить удаленную ветку». Вот что это за пути.
 01 дек. 2011 г., 00:38
git gc здесь не нужно, ноgit remote prune заставляет меня чувствовать себя безопаснее, чем удалять вещи вручнуюgit branch -rd, поскольку git проверяет, какие удаленные ветви сделаны.

$ git branch -rd origin/whatever 

Это так просто. Там нет причин для вызова здесь.

 07 сент. 2014 г., 20:43
Эй, это правильный ответ. Ницца. Спасибо.
 09 авг. 2012 г., 06:40
как вы "толкаете" что удалить в github?
 04 февр. 2015 г., 09:04
этот ответthe правильный .. серьезно
 24 сент. 2012 г., 05:03
Если у вас есть большая работа по очистке (много висящих пультов), вы можете просто удалить все удаленные ветви с помощью чего-то вродеgit branch -rd $(git branch -r) затем восстановите действительные, сделав выборку.
 09 авг. 2012 г., 09:09
@Thufir Это не то, о чем этот вопрос. Этот вопрос был специально для ситуаций, когда у вас есть недопустимая удаленная ссылка в локальном репозитории, но эта ветвь больше не существует на удаленном сервере. Ответ на ваш вопрос: $ git push origin: что угодно

ае у меня было два удаленных удаленных хранилища, которые показывались постоянно.

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

Допустим, хранилище называется & # x201C; Repo & # x201D ;. Я сделал:

find .git -name Repo

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

grep Repo -r .git

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

Обычно вы должны оставить эту работу для мерзавца.

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

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

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

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

сойка

git push public :master

Это удалит удаленную ветку с именемmaster as Kent Fredric has pointed out.<,/p>

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

git branch -r

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

git branch -rd public/master
 09 сент. 2011 г., 16:03
Это помогло мне удалить удаленную ветку git-svn.
 01 дек. 2011 г., 18:31
Я смог использоватьgit prune без каких-либо проблем, но мой сотрудник, который раздвоил наш основной репозиторий ** МОЖЕТ ТОЛЬКО ** использоватьgit branch -rd public/masterрешение для очистки окружающей среды.
 02 авг. 2012 г., 21:59
git branch -rd public/master было то, что мне не хватало. я имелheroku/master а такжеherkou/master ... лол вупс
 28 нояб. 2011 г., 09:14
git branch -rd removed_remote/branch работал на меня, в то время какgit gc --prune=now был бесполезен.
 11 июл. 2011 г., 10:05
у меня работает git branch -rd

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

когда ссылка была упакована. Это делает однако:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public
 09 сент. 2011 г., 09:11
Это сработало и для меня!
 15 мар. 2017 г., 11:53
Это то, что мне было нужно после использования svn2git. Было много удаленных / svn / * веток. Пришлось создать фиктивную "svn" дистанционный первый.
 18 июн. 2013 г., 13:14
Работал на меня. Обычная ветка git -d не работала, возвращала ошибку, что ветка не существует, потому что я удалил источник с именем & quot; оригинал & quot ;, который был создан по ошибке, прямо в файле .git / config.
 25 дек. 2016 г., 21:02
Это метод, который мне пришлось использовать для удаления веток, которые были случайно пропущены в моем .git / config (который пришлось перестраивать из-за несвязанного повреждения). Очень жаль, что этот ответ был так далеко вниз по цепочке, что я не замечал его, пока, наконец, я не нашел решение и не добавил его к принятому ответу!

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

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

 20 мая 2015 г., 22:01
вау, это помогло мне Мой коллега попытался, перезагрузите VS, перезагрузите компьютер, ничего не получилось, он удалил локальное хранилище и вытащил все, чтобы избавиться от этого :)
 20 мая 2015 г., 22:57
Сегодня я полагал, что этот упакованный файл создан как частьgit gcкогда он упаковывает ваши коммиты в сильно сжатый архив, он также перемещает ссылки в один простой текстовый файл, возможно, в целях оптимизации; Я надеюсь, что будущие версии Git могутgit br -D ... упакованные ссылки

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

git fetch -p

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

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

git config fetch.prune true

или же

git config --global fetch.prune true
 06 дек. 2012 г., 13:09
Это то, что я тоже искал - вопрос описывает сценарий более сложный, чем обычный.
 11 июл. 2014 г., 18:15
@ferventcoder Я дважды проверил ваше последнее редактирование и откатился на него. OP может откатиться снова, если ему это не нравится. Благодарю.
 22 апр. 2014 г., 16:57
Это удаляет ветви, перечисленные в remote / origin, но не удаляет локальные ветви отслеживания, что также важно.
 31 мая 2013 г., 02:13
Я ищу способ удаления локальных веток, где был удален соответствующий пульт, но у меня это не работает. Есть идеи почему?
 11 июл. 2014 г., 15:38
@Cupcake Поскольку вы не откатили мое первое редактирование (которое исправляло неверную информацию о Git 1.8.5+), вы теперь сделали это неверным. Мое второе редактирование исправляло то, что я вставил, было неверно, что теперь снова там (с вашим откатом). Пожалуйста, продолжайте и откатите еще одну правку, чтобы получить оригинал Благодарю.

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

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

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

 cmcginty30 июн. 2010 г., 00:42
Почему, в чем разница?
 14 июл. 2010 г., 22:53
@Casey $ git gc # выполняет дефрагментацию файлов git, чтобы ускорить восстановление хранилища $ git remote prune origin #, удалит устаревшие удаленные ветви, которые отображаются с помощью & quot; git branch -r | grep origin & quot ;. Вот во что спрашивает вопрос, я верю. Итак, команды совершенно разные.

Ваш ответ на вопрос