Ответ 1
Возможно, вам придется сначала обрезать локальный "кеш" удаленных веток. Попробуйте запустить:
git fetch -p origin
перед удалением.
У меня есть репозиторий git с десятками пультов, которые были объединены в master. Я могу удалить эти пульты по одному, используя:
git push --delete origin myBranch-1234
Однако это медленный и утомительный процесс для всех пультов. Поэтому я пробую эту команду:
git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete
git branch -r --merged
перечислены все объединенные пульты. grep origin
указывает команде включить источник. grep -v master
сообщает команде исключить мастер. xargs git push origin --delete
сообщает команде удалить список пультов.
Все вместе, я ожидаю, что это соберет все объединенные пульты и удалит их.
Когда я запускаю указанную выше команду, я получаю следующее для каждого объединенного пульта:
error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc
Однако эти пульты существуют, и я могу проверить каждую из них. Многие сайты и люди рекомендуют запустить git fetch --prune
для очистки отсутствующих ссылок. Это ничего не значит, потому что все эти пульты существуют.
Я думаю, что мне не хватает чего-то маленького. Каждый раз, когда я исследую это, кажется, что я делаю это правильно, но я получаю вышеуказанные ошибки.
Возможно, вам придется сначала обрезать локальный "кеш" удаленных веток. Попробуйте запустить:
git fetch -p origin
перед удалением.
Удалены ли эти ветки с удаленного (источника)? Если да, вы можете просто сделать
git fetch --prune origin
В противном случае они могут вернуться даже после их локального удаления.
Обновление: Глядя на вашу команду снова, похоже, что вы неправильно ее создаете. Вероятно, вы хотите
git push origin --delete myBranch-1234
но вместо этого вы делаете что-то вроде
git push origin --delete origin/myBranch-1234
Используйте sed
для удаления части "origin/" и изменения части lttile xargs
.
git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// | xargs -I{} git push origin --delete {}