Введение
Эта статья объясняет, как работать с удалёнными ветками в 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: просматривать их, настраивать ветки слежения, отправлять и получать изменения, а также удалять ветки на сервере. Эти инструменты обеспечивают гибкую совместную работу над проектами.
Отзывы