Как удалить неверную ссылку на удаленную ветку из Git?

StackOverflow https://stackoverflow.com/questions/1072171

  •  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, чтобы восстановить его до той даты, и теперь все снова работает нормально.Раньше пробовала чернослив, не помогло.Возможно, более жесткие меры по очистке сработали бы.

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

Джей

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top