Как удалить неверную ссылку на удаленную ветку из Git?
-
21-08-2019 - |
Вопрос
В моем текущем репо у меня есть следующий вывод:
$ 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
Решение
Возможно, вам нужна уборка
git gc --prune=now
или тебе может понадобиться чернослив
git remote prune public
чернослив
Удаляет все устаревшие ветки отслеживания под <имя>.Эти устаревшие ветки уже удалены из удаленного репозитория, на который ссылается <имя>, но они все еще доступны локально в «remotes/<имя>».
С опцией --dry-run сообщите, какие ветки будут обрезаны, но не обрезайте их на самом деле.
Однако, похоже, их следовало очистить раньше с помощью
git remote rm public
РМ
Удалите пульт с именем <имя>.Все удаленные ветви отслеживания и настройки конфигурации для удаленного дистанционного управления удаляются.
Возможно, вы вручную отредактировали файл конфигурации, но этого не произошло, или у вас проблемы с привилегиями.
Может быть, запустите это еще раз и посмотрите, что произойдет.
Контекст рекомендаций
Если вы заглянете в журналы изменений, заметьте, я предложил более «правильные» методики, которые по каким-то причинам не захотели работать на своем репозитории.
Я подозревал, что ОП сделал что-то, что оставило их дерево в противоречивом состоянии, из-за чего оно стало вести себя немного странно, и git gc
требовалось починить оставшийся хлам.
Обычно git branch -rd origin/badbranch
достаточно для уничтожения локальной ветки отслеживания, или 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/
У меня была аналогичная проблема.Ни один из ответов не помог.В моем случае у меня было два удаленных удаленных репозитория, которые постоянно отображались.
Моей последней идеей было удалить все ссылки на него вручную.
Допустим, репозиторий называется «Repo».Я сделал:
find .git -name Repo
и удалил соответствующие файлы и каталоги
grep Repo -r .git
Это обнаружило несколько текстовых файлов, в которых я удалил соответствующие строки.Теперь вроде все в порядке.
Обычно вам следует оставить эту работу git.
я не знал о git branch -rd
, поэтому я решил такие проблемы для себя, чтобы рассматривать мое репо как удаленное репо и выполнять удаленное удаление. git push . :refs/remotes/public/master
.Если другие способы не работают и у вас есть какая-то странная ссылка, от которой вы хотите избавиться, этот простой способ верен.Это дает вам точную точность, позволяющую удалить (или создать!) любую ссылку.
Связано лишь незначительно, но все же может быть полезно в той же ситуации, что и у нас — мы используем общий сетевой ресурс для нашего удаленного репозитория.На прошлой неделе все работало, на этой неделе мы получили ошибку «Удаленный источник не рекламировал ссылку для веток refs/heads/master.Эта ссылка может не существовать на пульте дистанционного управления или может быть скрыта настройками разрешений"
Но мы считали, что ничего не было сделано, чтобы испортить ситуацию.NFS делает снимки, поэтому я просмотрел каждую «предыдущую версию» и увидел, что три дня назад размер репозитория в МБ увеличился с 282 МБ до 33 МБ, и теперь существует около 1403 новых файлов и 300 папок.Я опросил своих коллег, и один из них в тот день пытался сделать толчок, но затем отменил его.
Я использовал функцию «Восстановление» NFS, чтобы восстановить его до той даты, и теперь все снова работает нормально.Раньше пробовала чернослив, не помогло.Возможно, более жесткие меры по очистке сработали бы.
Надеюсь, однажды это может помочь кому-то еще!
Джей