Как получить все ветки Git-репозитория: полный пошаговый гайд
Как получить все ветки Git-репозитория: полный пошаговый гайд
Вы клонируете репозиторий командой
git clone git@gitflic.ru:ramanzes/deploy-django.git
и видите только ветку master (или main). Все остальные ветки (alpine, alpine_full_itdid3_final и т.д.) существуют на сервере, но у вас локально их нет.
Это абсолютно нормально.
По умолчанию git clone:
- Скачивает все данные репозитория (включая все ветки и теги).
- Создаёт только одну локальную ветку — ту, которая объявлена на сервере как
HEAD(обычноmasterилиmain). - Все остальные ветки хранятся как удалённые (remote-tracking branches) в виде
origin/название_ветки.
Эта статья — универсальный гайд, который решит вашу задачу и поможет в 99 % похожих ситуаций.
1. Что у вас уже есть после клонирования
Выполните эти команды, чтобы понять текущее состояние:
☯
Terminal:
⌕
≡
✕
# 1. Текущая локальная ветка git branch # 2. Все удалённые ветки (то, что действительно есть на сервере) git branch -r # 3. Подробная информация о репозитории git remote -v
Пример вывода git branch -r:
☯
Terminal:
⌕
≡
✕
origin/HEAD -> origin/master origin/alpine origin/alpine_full_itdid3_final origin/alpine_full_itdid3_final_lavander origin/alpine_with_docker-compose origin/master
2. Самый быстрый способ: получить ВСЕ ветки локально одной командой
Выполните одну из следующих команд (выберите ту, которая вам удобнее).
Вариант A — современный и самый чистый (рекомендуется, Git 2.23+):
☯
Terminal:
⌕
≡
✕
git fetch --all --prune
git for-each-ref --format='%(refname:short)' refs/remotes/origin/ | \
grep -v 'HEAD' | \
sed 's#^origin/##' | \
xargs -I{} git branch --track {} origin/{}Вариант B — классический (работает везде):
☯
Terminal:
⌕
≡
✕
git fetch --all --prune for b in $(git branch -r | sed 's# *origin/##' | grep -v 'HEAD\|->'); do git branch --track "$b" "origin/$b" 2>/dev/null || true done
После выполнения любой команды посмотрите результат:
☯
Terminal:
⌕
≡
✕
git branch
Вы увидите все ветки как локальные (без префикса origin/).
3. Как переключиться на нужную ветку (самый частый запрос)
Пример: вам нужна ветка alpine_full_itdid3_final.
☯
Terminal:
⌕
≡
✕
# Сначала обновляем данные с сервера git fetch origin # Создаём локальную ветку и сразу переключаемся на неё git checkout -b alpine_full_itdid3_final origin/alpine_full_itdid3_final
Или современный способ (Git 2.23+):
☯
Terminal:
⌕
≡
✕
git fetch origin git switch -c alpine_full_itdid3_final --track origin/alpine_full_itdid3_final
После этого:
- Вы находитесь на ветке
alpine_full_itdid3_final. - Локальная ветка отслеживает
origin/alpine_full_itdid3_final. - Вся история и файлы этой ветки уже загружены.
Проверить можно так:
☯
Terminal:
⌕
≡
✕
git branch --show-current # покажет текущую ветку git status # статус git log --oneline --decorate -10 # последние коммиты
4. Полезные команды на каждый день
| Задача | Команда |
| Обновить все ветки | git fetch --all --prune |
| Переключиться на уже существующую локальную ветку | git switch alpine или git checkout alpine |
| Создать локальную ветку из удалённой | git switch -c имя_ветки --track origin/имя_ветки |
| Удалить локальную ветку | git branch -d имя_ветки |
| Удалить ветку на сервере | git push origin --delete имя_ветки |
| Посмотреть все ветки (локальные + удалённые) | git branch -a |
5. Альтернативные способы клонирования (если вы ещё не клонировали)
Если вы только собираетесь клонировать репозиторий и хотите сразу получить все ветки:
☯
Terminal:
⌕
≡
✕
# Вариант 1 (самый удобный)
git clone --no-checkout git@gitflic.ru:ramanzes/deploy-django.git
cd deploy-django
git checkout -b master origin/master
git for-each-ref --format='%(refname:short)' refs/remotes/origin/ | grep -v HEAD | sed 's#^origin/##' | xargs -I{} git branch --track {} origin/{}
git switch master☯
Terminal:
⌕
≡
✕
# Вариант 2 (зеркало — подходит только для бэкапа, не для разработки) git clone --mirror git@gitflic.ru:ramanzes/deploy-django.git
6. Частые проблемы и решения
Проблема: fatal: 'origin/alpine_full_itdid3_final' is not a commit and a branch 'alpine_full_itdid3_final' cannot be created from it
Решение: Сначала git fetch origin
Проблема: Предупреждение о post-quantum key exchange (SSH)
Решение: Это предупреждение от OpenSSH 9.5+. Сервер gitflic.ru пока не обновлён. Оно не мешает работе — просто игнорируйте.
Проблема: Хочу удалить все лишние локальные ветки
☯
Terminal:
⌕
≡
✕
git branch --merged | grep -vE '^\*|master|main' | xargs -r git branch -d
Проблема: Ветка исчезла после git fetch --prune
Значит, она была удалена на сервере. Это нормально — --prune убирает устаревшие ссылки.
7. Рекомендации по работе
- После любого
git cloneсразу делайтеgit fetch --all --prune. - Используйте
git switchвместоgit checkout— он современнее и безопаснее. - Никогда не работайте напрямую на
origin/что-то— это только ссылки, а не рабочие ветки. - Для командной работы настройте в
.git/configудобные алиасы:
☯
Terminal:
⌕
≡
✕
[alias]
co = checkout
sw = switch
br = branch
st = status
fetchall = fetch --all --pruneИтог
Теперь у вас есть полноценный чек-лист:
git clone ...git fetch --all --prune- Создать все локальные ветки одной из команд из раздела 2.
git switch нужная_ветка
-
Создано 26.11.2025 19:13:56
-
Roman Sakhno

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.