Часто используемые ветки
Большинство проектов
включают две основные ветки – master
и dev
. Ветка master
используется для продакшна,
а dev
– для тестирования. Когда новые изменения протестированы в ветке
dev
, их можно сливать с веткой master
и после этого
деплоить. Имена ветвей, их количество могут быть другими – это самые
распространённые.
Есть важное правило: вы
не должны работать с этими ветками напрямую. Для любого изменения в программном
проекте надо сначала создать новую ветвь, унаследовавшись от dev
и дать ей имя,
отражающее сделанное изменение.
Теперь перейдём к реальным примерам ветвления Git, встречающимся в повседневной жизни разработчиков программного обеспечения.
Настройка удалённых и локальных веток
Предположим, есть
тестовый репозиторий на GitHub. Перейдём на главную страницу этого репозитория
и щёлкнем по разделу 1 branch
.
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/d46cafb1373dd2f0c86d2deeb705a02a.png)
Как можно видеть, здесь
только созданная по умолчанию ветка master
. Она сообщает,
что содержимое домашней страницы репозитория загружается при выборе данной ветки.
Вернёмся на главную
страницу и кликнем по выпадающему меню Branch: master
. Если написать dev
и нажать на
появившийся пункт Create branch: dev
, можно создать ветку dev
в своём
удалённом репозитории.
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/0b0073fc788d87be5748dd17162f348e.png)
Создание ветки на локальном репозитории
Для просмотра локального репозитория после добавления ветки dev
в удалённый репозиторий,
используется следующая команда:
$git branch
или такая:
$git branch –-list
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/4d48acca67814f348eab92b3289be607.png)
Эта команда выведет в окно терминала локальные ветви.
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/eda0b93d188d51935ae766ea31a3e5c5.png)
Чтобы
выйти из списка веток, используйте клавишу q
.
Для просмотра удалённых веток применяется следующая команда:
$git branch –r
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/26a297605aed4ee9ca00643ce7f7f172.png)
Получение изменений из удалённого репозитория
Теперь попробуем заставить появиться удалённую ветку dev
. Извлечём все последние
изменения удалённого репозитория:
$git fetch –all
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/a1e7752304743f3b6bed830caa59ebf8.png)
Теперь
dev
появилась среди других веток, потому что с помощью git fetch
извлекаются
последние актуальные метаданные.
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/f7481f64b74e99dc03ff6a8072c89f87.png)
Чтобы
извлечь и скопировать все изменения из удалённого репозитория, нужно использовать команду
git pull
:
$git pull origin dev (ключевое слово origin указывает на удаленный репозиторий)
Теперь информация о ветке верна. Чтобы просмотреть удалённые и локальные ветки, можно использовать уже известную команду с другим ключом:
$git branch –a
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/c1856a571043c7d2a7b17287d560caec.png)
Переключение между ветками
Всё готово к разработке, и непосредственно перед началом нам нужно изменить текущую
ветку с master
на dev
. Сделаем это в локальном репозитории с помощью команды:
$git checkout dev
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/6a4c1f99eb7dc98d2f710490f574eaf4.png)
Как
говорилось ранее, dev
должна быть основной ветвью для разработки и все
действия должны начинаться именно из неё.
CRUD операции с ветками
Создание ветви
Создадим
новую ветвь из ветви dev
:
$git branch my-new-faeture
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/850ca7f21a365084def7adf92ffe968c.png)
Снова проверим локальные ветви:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/feea432de59e68675e69b061efd0d557.png)
Обновление имени ветки
Чтобы поменять имя существующей ветки, нет необходимости создавать всё сначала т. к. есть специальная команда:
$git branch -m my-bug-fix
Если вы находитесь в другой ветви, вы всё равно можете переименовать любую из них следующим образом:
$git branch -m my-new-faeture my-new-feature
Проверим правильность указанных имён:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/45893e88cfd10e211d9d6a1f35d9b161.png)
Коммит ветки
Внесём
изменения в файл README.md
и проверим локальный репозиторий:
$git status
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/c9cb65518c41d0ba1ea279117504895c.png)
Перенесём файл в промежуточную область и сделаем коммит:
$git add README.md
$git commit -m "my first commit"
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/752f64ffa39e227c9813e55e3dc58728.png)
Проверяем:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/2e2c0a8081a276d1a4266f326497109f.png)
Отправка изменений на удалённый сервер
Теперь можно пушить коммит:
$git push origin my-new-branch
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/9cbf2a6b9ec70f2cc4ca95014b18ac21.png)
После отправки актуальной информации о ветке в удалённый репозиторий, нужно проверить, всё ли прошло корректно:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/c6dcb3c200195341d40846878f4f4819.png)
Удаление ветки
Если
есть необходимость в удалении ветви, переходим в dev
(или в любую ветку,
которую нужно удалить) и выполняем удаление:
$git checkout dev
$git branch -d my-new-branch
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/21657f705be0169dd332e5a4c6418251.png)
Удаление
завершилось неудачно т. к. удаление локальной ветви с помощью команды git
branch -d
является безопасной операцией. Если ветка имеет статус unpushed или
unmerged , её можно удалить только принудительно:
$git branch -D my-new-branch
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/7df7ed8c631209f636c3e1ed032fe55b.png)
Как
насчёт удаления remote-ветки? Для этой цели у push есть ключ --delete
:
$git push origin --delete my-new-branch
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/283e3d9438410b3fbc9f6583ef7dad56.png)
Проверим:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/219643598d4d94d86b8ed286a1d90973.png)
Видим,
что my-new-branch
очищена от всех локальных и удалённых репозиториев.
Проделаем всё сначала и создадим новую ветку, как «правильные ребята»:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/fb4d437e0694b2df1e07b5859c3edbd4.png)
Внесём изменения:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/e8e248b8a1fe3a288470a8550deb6b3d.png)
Проверим состояние ветки:
$git status
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/dffa29d07ec43cd36d69fddbd6c12524.png)
Наблюдаем
изменённый файлик README.md
, коммитим текущее изменение локального репозитория,
добавив файл в промежуточную область:
$git add README.md
$git commit -m "my killer feature"
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/1a4dc1500fe7f0bca28f4da650fa7e63.png)
Пушим результат на удалённый сервер:
$git push origin feature/my-killer-feature
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/2349299e6b09cd9f369d794523ad6d8d.png)
Теперь предположим, что ваш
коллега нашёл какой-то баг в коде, исправил его и создал копию данной ветки с
другим именем: fix/my-killer-feature-bug-fix
.
Слияние ветвей
Как обычно, сначала получаем актуальную информацию о репозитории:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/4b77e4ea368a99fa5b17bb33ce4b33a8.png)
Далее ищем ветку, над которой работал коллега:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/35e031ff2dd0cc45adf0983c290300e7.png)
Теперь можно сливать исправленную ветку с feature/my-killer-feature
с помощью команды git merge
(убедитесь, что
находитесь в нужной ветви).
$git merge origin/fix/my-killer-feature-fix
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/8eb19da68d63dec3b0e75acf1f29fd42.png)
Проверяем конечный результат:
![Ветвление Git с примерами из реальной жизни](https://media.proglib.io/posts/2020/01/24/d3aa498b2c0e6fb0fd815b784b66dfe2.png)
Заключение
Редакция Библиотеки Программиста надеется, что этот материал поможет вам узнать или укрепить знания о ветвлении в Git для ежедневного использования.
Если вам интересен Git, у нас для него есть специальный тег.
В этом теге наиболее близкие к этой статье следующие:
Комментарии