Мне придется добавить ответ здесь, потому что другие ответы либо не охватывают мой случай, либо излишне сложны.
Я использую github с другими разработчиками, и я просто хочу, чтобы все локальные ветки, удаленные из которых (возможно, были объединены и) удалены из github PR, были удалены за один раз с моей машины. Нет, такие вещи, как git branch -r --merged
, не охватывают ветви, которые не были объединены локально, или ветви, которые вообще не были объединены (оставлены) и т. Д., Поэтому необходимо другое решение.
Во всяком случае, первый шаг, который я получил из других ответов:
git fetch --prune
Пробный прогон git remote prune origin
выглядел так, как будто он сделал бы то же самое в моем случае, поэтому я остановился на самой короткой версии, чтобы сделать ее простой.
Теперь git branch -v
должен пометить ветви, удаленные из которых удалены, как [gone]
.
Поэтому все, что мне нужно сделать, это:
git branch -v|grep \\[gone\\]|awk '{print $1}'|xargs -I{} git branch -D {}
Так просто, он удаляет все, что я хочу для вышеуказанного сценария.
Менее распространенный синтаксис xargs
таков, что он также работает на Mac и BSD в дополнение к Linux.
Осторожно, эта команда не является пробной, поэтому она принудительно удалит все ветви, помеченные как [gone]
. Очевидно, что это git - ничто не исчезнет навсегда, если вы видите удаленные ветви, которые, как вы помните, хотели сохранить, вы всегда можете восстановить их (приведенная выше команда перечислит их хэш при удалении, поэтому просто git checkout -b <branch> <hash>
.