Коли ви користуєтесь git push origin :staleStuff, він автоматично видаляється origin/staleStuff, тож коли ви бігли git remote prune origin, ви обрізали якусь гілку, яку видалив хтось інший. Більш ймовірно, що вашим колегам зараз потрібно бігти, git pruneщоб позбутися від вилучених гілок.
То що саме git remote pruneробить? Основна ідея: локальні гілки (не відстежуючі гілки) не торкаються git remote pruneкомандою, і їх слід видалити вручну.
Тепер приклад у реальному світі для кращого розуміння:
У вас є віддалене сховище з 2 гілками: masterі feature. Припустимо, що ви працюєте в обох гілках, тому в результаті ви маєте ці посилання у вашому локальному сховищі (дані повні довідкові імена, щоб уникнути плутанини):
refs/heads/master(коротка назва master)
refs/heads/feature(коротка назва feature)
refs/remotes/origin/master(коротка назва origin/master)
refs/remotes/origin/feature(коротка назва origin/feature)
Зараз типовий сценарій:
- Деякий інший розробник закінчує всю роботу над
feature, об'єднує його masterі видаляє featureгілку з віддаленого сховища.
- За замовчуванням, коли ви робите
git fetch(або git pull), жодне посилання не видаляється з вашого локального сховища, тому у вас ще є всі ці 4 посилання.
- Ви вирішили їх почистити і запустити
git remote prune origin.
- git виявляє, що
featureгілки більше не існує, тому refs/remotes/origin/featureце несвіжа гілка, яку слід видалити.
- Тепер у вас є 3 посилання, в тому числі
refs/heads/feature, оскільки git remote pruneне видаляє жодних refs/heads/*посилань.
Можна встановити локальні гілки, пов'язані з гілками віддаленого відстеження, за branch.<branch_name>.mergeпараметром конфігурації. Цей параметр насправді не потрібен, щоб нічого не працювало (можливо, крім git pull), тому він може бути відсутнім.
(оновлено прикладом та корисною інформацією з коментарів)
git remote show originі шукати будь-які гілки з позначкоюstale