Belov Solutions

Удалённые ветки в Git

Введение

Эта статья объясняет, как работать с удалёнными ветками в Git: просматривать их, настраивать отслеживание, отправлять изменения, синхронизировать данные и удалять ветки на сервере. Примеры подходят для любой операционной системы с установленным Git.

Что такое удалённые ветки

Удалённые ссылки — это указатели на ветки, теги и другие объекты в удалённых репозиториях. Чтобы получить их список, используйте:

git ls-remote origin

Или для более подробной информации:

git remote show origin

Более удобный способ — использование веток слежения, которые представляют состояние удалённых веток и обновляются автоматически при взаимодействии с сервером. Их имена имеют формат <remote>/<branch>, например, origin/master.

Примечание: Название origin — это не специальное значение, а имя по умолчанию, задаваемое командой git clone. Например, при клонировании с git clone -o booyah ветка слежения будет называться booyah/master.

Клонирование и ветки слежения

При клонировании репозитория, например, с git.ourcompany.com, Git:

  • Называет сервер origin.
  • Загружает все данные.
  • Создаёт ветку слежения origin/master, указывающую на master сервера.
  • Создаёт локальную ветку master, начинающуюся с того же коммита.

Если вы вносите изменения в локальную ветку master, а кто-то обновляет master на сервере, истории разойдутся. Ветка слежения origin/master остаётся неизменной, пока вы не синхронизируете данные.

Синхронизация с помощью git fetch

Для обновления веток слежения выполните:

git fetch origin

Эта команда загружает данные с сервера origin (например, git.ourcompany.com) и обновляет origin/master без изменения рабочей копии.

Пример с несколькими серверами: добавьте сервер git.team1.ourcompany.com как teamone:

git remote add teamone git.team1.ourcompany.com

Получите данные:

git fetch teamone

Git создаёт ветку слежения teamone/master, указывающую на master сервера teamone.

Отправка изменений

Локальные ветки не синхронизируются автоматически. Чтобы отправить ветку, например, serverfix, на сервер:

git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
 * [new branch]      serverfix -> serverfix

Это эквивалентно:

git push origin serverfix:serverfix

Для отправки в ветку с другим именем, например, awesomebranch:

git push origin serverfix:awesomebranch

Совет: Чтобы не вводить пароль при каждом git push с HTTPS, настройте кэш учётных данных:

git config --global credential.helper cache

Работа с ветками слежения

Когда коллега получает изменения с помощью git fetch origin, создаётся ветка слежения origin/serverfix:

git fetch origin
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
 * [new branch]      serverfix    -> origin/serverfix

Чтобы слить изменения в текущую ветку:

git merge origin/serverfix

Для создания локальной ветки на основе origin/serverfix:

git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'

Или используйте сокращение:

git checkout --track origin/serverfix

Если локальной ветки нет, но есть удалённая ветка с таким же именем:

git checkout serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'

Для создания локальной ветки с другим именем:

git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'

Для настройки слежения существующей локальной ветки:

git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.

Проверка веток слежения

Для просмотра статуса веток слежения:

git branch -vv
  iss53     7e424c3 [origin/iss53: ahead 2] Add forgotten brackets
  master    1ae2a45 [origin/master] Deploy index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] This should do it
  testing   5ea463a Try something new

Здесь видно, что:

  • iss53 опережает origin/iss53 на 2 коммита.
  • master актуальна с origin/master.
  • serverfix опережает teamone/server-fix-good на 3 коммита и отстаёт на 1.
  • testing не отслеживает удалённую ветку.

Для обновления данных выполните:

git fetch --all; git branch -vv

Получение изменений с помощью git pull

Команда git pull объединяет git fetch и git merge. Для ветки слежения она автоматически получает и сливает изменения:

git pull

Рекомендуется использовать git fetch и git merge отдельно для большего контроля.

Удаление веток на сервере

Для удаления ветки, например, serverfix, на сервере:

git push origin --delete serverfix
To https://github.com/schacon/simplegit
 - [deleted]         serverfix

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

Заключение

Вы узнали, как работать с удалёнными ветками в Git: просматривать их, настраивать ветки слежения, отправлять и получать изменения, а также удалять ветки на сервере. Эти инструменты обеспечивают гибкую совместную работу над проектами.

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована