Как удалить недопустимую ссылку удаленной ветки из 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
:
$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Ответы
Ответ 1
Вам может понадобиться очистка
git gc --prune=now
или вам может понадобиться черновик
git remote prune public
чернослив
Удаляет все ветки ветвей отслеживания под < name. Эти устаревшие ветки уже удалены из удаленного репозитория, на который ссылается < имя > , но все еще локально доступны в "remotes/< имя > ".
С параметром --dry-run сообщите, какие ветки будут обрезаны, но фактически не обрезайте их.
Однако, похоже, они должны были быть очищены раньше с помощью
git remote rm public
гт
Удалите удаленное имя с именем < name. Все удаленные ветки отслеживания и настройки конфигурации для удаленного удаляются.
Итак, вы можете вручную отредактировать свой файл конфигурации, и это не произошло, или у вас есть проблемы с привилегиями.
Возможно, запустите это снова и посмотрите, что произойдет.
Контекст
Если вы посмотрите в журналах ревизий, вы заметите, что я предложил более "правильные" методы, которые по какой-то причине не хотели работать их хранилище.
Я подозревал, что OP сделал что-то, что оставило их дерево в несогласованном состоянии, что вызвало его странное поведение, и git gc
потребовалось исправить левый позади трещины.
Обычно git branch -rd origin/badbranch
достаточно для nuking локальной ветки отслеживания или git push origin :badbranch
для nuking удаленной ветки, и обычно вам не нужно будет вызывать git gc
Ответ 2
Все, что вам нужно сделать, это
git fetch -p
Он удалит все локальные ветки, удаленные удаленно.
Если вы находитесь на git 1.8.5+, вы можете установить это автоматически
git config fetch.prune true
или
git config --global fetch.prune true
Ответ 3
git push public :master
Это удалит удаленную ветвь с именем master
, как указал Кент Фредрик.
Чтобы отобразить ветки удаленного отслеживания:
git branch -r
Чтобы удалить ветвь удаленного отслеживания:
git branch -rd public/master
Ответ 4
Все, что вам нужно сделать, это
$ git branch -rd origin/whatever
Это так просто. Нет причин для вызова gc здесь.
Ответ 5
git gc --prune=now
- это не то, что вы хотите.
git remote prune public
или git remote prune origin
#, если это удаленный источник
- это то, что вы хотите
Ответ 6
Принятый ответ не работал у меня, когда ref был упакован. Это однако:
$ git remote add public http://anything.com/bogus.git
$ git remote rm public
Ответ 7
В моем случае я пытался удалить записи, сохраненные в .git/packed-refs
. Вы можете отредактировать этот текстовый файл и удалить из него записи, которые git br -D
не знает, как прикасаться (по крайней мере, в версии 1.7.9.5).
Я нашел это решение здесь: fooobar.com/questions/12838/...
Ответ 8
git push origin --delete <branch name>
Ссылка на: http://www.gitguys.com/topics/adding-and-removing-remote-branches/
Ответ 9
У меня была аналогичная проблема. Ни один из ответов не помог. В моем случае у меня было два удаленных удаленных хранилища, которые постоянно появляются.
Моя последняя идея заключалась в том, чтобы удалить все ссылки на нее вручную.
Предположим, что репозиторий называется "Repo". Я сделал:
find .git -name Repo
и удалили соответствующие файлы и каталоги
grep Repo -r .git
Это нашло несколько текстовых файлов, в которых я удалил соответствующие строки.
Теперь все кажется прекрасным.
Обычно вы должны оставить это задание git.
Ответ 10
Я не знал о git branch -rd
, так что я решил такие проблемы, как это для себя, - это обработать мое репо как удаленное репо и сделать удаленное удаление. git push . :refs/remotes/public/master
. Если другие способы не работают, и у вас есть какая-то странная ссылка, от которой вы хотите избавиться, этот необработанный путь - это уверенность. Он дает точную точность удаления (или создания!) Любых ссылок.
Ответ 11
Только немного связанные, но все же могут быть полезны в той же ситуации, что и у нас - мы используем общий сетевой файл для нашего удаленного хранилища. На прошлой неделе все работало, на этой неделе мы получили сообщение об ошибке: "Удаленный источник не афишировал Ref для ссылки ref/заголовки /master. Этот Ref может не существовать в удаленном или может быть скрыт настройками разрешений"
Но мы верили, что ничего не было сделано, чтобы развратить вещи. NFS делает снимки, поэтому я просмотрел каждую "предыдущую версию" и увидел, что три дня назад размер хранилища в МБ изменился с 282 МБ до 33 МБ, и теперь существует около 1403 новых файлов и 300 папок. Я обратился к своим сотрудникам, и один из них попытался сделать толчок в тот день, а затем отменил его.
Я использовал функциональность NFS "Восстановить", чтобы восстановить его до этой даты, и теперь все снова работает нормально. Я пробовал чернослив ранее, похоже, не помогло. Может быть, более жесткие очистки сработали бы.
Надеюсь, что это может помочь кому-то еще однажды!
сойка