Git удалить пульты дистанционного управления: удаленных ссылок не существует

Короче говоря,

  • Как удалить удаленные несколько объединенных пультов?

Больше фона;

У меня есть репозиторий 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 для очистки отсутствующих ссылок. Это ничего не значит, потому что все эти пульты существуют.

Итак, я спрашиваю вас, дорогая замена стека;

  • Почему я могу удалить один пульт, но не так много?
  • Правильно ли моя команда?

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

Ответ 1

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

git fetch -p origin

перед удалением.

Ответ 2

Удалены ли эти ветки с удаленного (источника)? Если да, вы можете просто сделать

git fetch --prune origin

В противном случае они могут вернуться даже после их локального удаления.

Обновление: Глядя на вашу команду снова, похоже, что вы неправильно ее создаете. Вероятно, вы хотите

git push origin --delete myBranch-1234

но вместо этого вы делаете что-то вроде

git push origin --delete origin/myBranch-1234

Ответ 3

Используйте sed для удаления части "origin/" и изменения части lttile xargs.

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}