Bootstrap

Как получить все ветки Git-репозитория: полный пошаговый гайд

Как получить все ветки 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. Рекомендации по работе

  1. После любого git clone сразу делайте git fetch --all --prune.
  2. Используйте git switch вместо git checkout — он современнее и безопаснее.
  3. Никогда не работайте напрямую на origin/что-то — это только ссылки, а не рабочие ветки.
  4. Для командной работы настройте в .git/config удобные алиасы:

Terminal:

[alias]
    co = checkout
    sw = switch
    br = branch
    st = status
    fetchall = fetch --all --prune

Итог

Теперь у вас есть полноценный чек-лист:

  1. git clone ...
  2. git fetch --all --prune
  3. Создать все локальные ветки одной из команд из раздела 2.
  4. git switch нужная_ветка

Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

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