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), так что это может быть недостающий.(обновлено с примером и полезной информацией из комментариев)