git remote prune – не показал столько обрезанных ветвей, сколько я ожидал
С главной страницы:
Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".
Так я удалил кучу веток с помощью
git push origin :staleStuff
а потом побежал
git remote prune origin
однако была обрезана только одна локальная ветвь. Некоторые из этих филиалов были созданы мной, некоторые коллеги. Означает ли это, что я не отслеживал эти ветви правильно в первую очередь?
1 ответ:
при использовании
git push origin :staleStuff
, он автоматически удаляетorigin/staleStuff
, Так что когда вы бежалиgit remote prune origin
, вы подрезали какую-то ветку, которая была удалена кем-то другим. Это более вероятно, что ваши коллеги теперь нужно запуститьgit 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
), так что это может быть недостающий.(обновлено с примером и полезной информацией из комментариев)