Коротко;
- Как я могу удалить несколько удаленных объединенных пультов?
Больше фона;
У меня есть репозиторий git с десятками пультов, которые были объединены в мастер. Я могу удалить эти пульты по одному, используя:
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
сообщает команде, что нужно включить origin.
grep -v master
сообщает команде исключить 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
чтобы очистить недостающие ссылки. Это ничего не делает, потому что все эти пульты существуют.
Итак, я прошу вас, дорогая биржа стека;
- Почему я могу удалить один пульт, а не много?
- Моя команда верна?
Думаю, мне не хватает чего-то маленького. Каждый раз, когда я исследую это, кажется, что я делаю это правильно, но получаю указанные выше ошибки.
источник
--prune
? На мой взгляд, это довольно вводит в заблуждениеorigin/
в имена веток, как описано / решено в других ответах.Эти ветки удалены из удаленного (источника)? Если да, вы можете просто сделать
В противном случае они могут вернуться даже после того, как вы удалите их локально.
Обновление: еще раз взглянув на свою команду, похоже, что вы ее неправильно создаете. Ты наверное хочешь
но вместо этого вы делаете что-то вроде
источник
git branch -r --merged
а затем пытаюсь удалить ихxargs git push origin --delete
. Команда пытается удалить пульты, но считает, чтоremote ref does not exist
.xargs
чтобы увидеть, что на самом деле выполняется.origin/
префикс в имя ветки, git уже знает, что вы работаете с исходными ветвями, так как вы работаетеgit push origin
. Мыкола предложил сделать последнюю часть командыxargs echo
, а неecho xargs [...]
.Используется
sed
для удаления части 'origin /' и изменения легкойxargs
части.источник