Хотя это выглядит как слепой слон в отношении ловкого и умного решения, предложенного jthill, я разделяю здесь жестокий подход, который я склонен использовать до сих пор для той же потребности, которую вы описываете:
# nuke all branches* (which have no unique commit)
git branch -d $(git for-each-ref --format="%(refname:short) refs/heads")
# for "main" branches (I mean permanent, like master), recreate them if needed from remote
git checkout master
Это однократная версия, но для удобства ее можно легко создать из псевдонима.
Обратите внимание на флаг -d
, который в отличие от -D
означает «мягкое удаление» и отказывается от удаленияветви с неотправленными коммитами (safecheck игнорируется -D
).
* здесь, git может (в зависимости от состояния текущей ветки) жаловаться на невозможность удалить ветку, которую вынаНичего страшного в прямом командном режиме, но немного раздражает псевдоним.Просто зацените ложную ветку заранее и удалите ее потом.Так как, конечно, мы обнуляем все, я склонен называть ветвь from-orbit
.