На странице руководства:
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
Однако была обрезана только одна местная ветка. Некоторые из этих веток были созданы мной, некоторые - сотрудниками. Означает ли это, что я изначально неправильно отслеживал эти ветки?
git
version-control
branch
git-branch
git-remote
Феликсиз
источник
источник
git remote show origin
и поискать любые ветки, отмеченныеstale
Ответы:
Когда вы используете
git push origin :staleStuff
, он автоматически удаляетсяorigin/staleStuff
, поэтому, когда вы запускалиgit remote prune origin
, вы обрезали ветку, которая была удалена кем-то другим. Более вероятно, что вашим коллегам теперь нужно бежать,git prune
чтобы избавиться от веток, которые вы удалили.Так что именно
git remote prune
? Основная идея: локальные ветки (не отслеживающие ветки) не затрагиваютсяgit remote prune
командой и должны быть удалены вручную.А теперь реальный пример для лучшего понимания:
У вас есть удаленный репозиторий с двумя ветками:
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
.feature
ветка больше не существует, поэтомуrefs/remotes/origin/feature
это устаревшая ветка, которую следует удалить.refs/heads/feature
, т.к.git remote prune
не удаляет ни однойrefs/heads/*
ссылки.По
branch.<branch_name>.merge
параметру конфигурации можно идентифицировать локальные ветви, связанные с удаленными ветвями отслеживания . Этот параметр на самом деле не требуется, чтобы что-то работало (возможно, кромеgit pull
), поэтому он может отсутствовать.(обновлено примером и полезной информацией из комментариев)
источник
git prune
. Обрезке/refs/remotes/<remote_name>/
подлежат только ветви ; никакие ветки в/refs/heads/
не будут затронуты - вы должны управлять ими вручную.branch.<branch_name>.merge
параметра конфигурации.