January 30, 2022

Работа с Git ветками

Основные команды для работы с ветками:

Создание

git checkout -b имя - создание ветки из текущего коммита c переходом в нее

git branch имя - создание ветки из текущего коммита

git push репозиторий ветка - создание серверной ветки на основе локальной
git push репозиторий имя_локальной:имя_серверной - то же, но с другим именем на сервере

git fetch репозиторий; затем git checkout -b имя_локальной репозиторий/имя_серверной - создание локальной ветки на основе серверной либо, если с тем же названием как и на сервере git checkout --track репозиторий/ветка

Отправка данных в серверную ветку

git push - если ветка является веткой слежения с тем же имеем, что и серверная

git push репозиторий имя_локальной - если одноименные ветки

git push репозиторий имя_локальной:имя_серверной - в противном случае

Объединение с другой веткой

с локальной

git merge имя

с серверной

git fetch репозиторий а затем git merge - если ветка является веткой слежения с тем же имеем, что и серверная git merge репозиторий/имя - в общем случае

либо

git pull - если ветка является веткой слежения с тем же имеем, что и серверная git pull репозиторий имя - в общем случае

Создание из текущей ветки, ветки слежения

git branch -u репозиторий/ветка

Удаление

git branch -d имя - локальной ветки

git push репозиторий --delete ветка - серверной ветки

Информация

git branch - отобразить все ветки с пометкой текущей

git branch -v - отобразить все ветки с последними коммитами

git branch -vv - отобразить все ветки и их аналоги на сервере

Теперь продемонстрируем работу команд на практике:

Создадим первый проект и настроим Git:

git init
git remote add test https://github.com/dtanalytic/test.git

Создадим файл hello.py с таким содержанием:

Добавим файл в список слежения и закоммитимся:

git add hello.py
git commit -m hello_from_master

Отправим изменения на сервер

git push test master

Теперь создаем другой проект, в котором будем работать с этим же репозиторием. Для этого клонируем существующий репозиторий в новой папке:

git clone https://github.com/dtanalytic/test.git proj2

Переименуем удаленный репозиторий:

git remote rename origin test

Вернемся к первому проекту и создадим ветку:

git branch branch1

а затем перейдем в нее:

git checkout branch1

изменим содержимое файла:

и закоммитимся:

git commit -am branch1

Затем вернемся в ветку master, внесем изменения и сделаем коммит:

git checkout master
git commit -am hello_master_branch1

Перейдем на branch1 и объединим ее c master:

git checkout branch1
git merge master 

Разрешаем конфликт и коммитимся:

git add hello.py
git commit -m get_hello_branch1

Отправляем эту ветку на сервер:

git push test branch1:br1

Теперь возвращаемся ко второму проекту и создаем локальную ветку, следящую за br1:

git fetch test
git checkout --track test/br1 

Теперь изменим файл, закоммитимся и отправим изменения на удаленную ветку:

git commit -am hello_proj2
git push

Перейдем в первый проект, скачаем изменения из удаленной ветки:

git fetch test
git merge test/br1

Внесем дополнительные изменения, закоммитимся и отправим данные на сервер:

git push test branch1:br1

Теперь перейдем во второй проект, удалим серверную и локальную ветку br1:

git push test --delete br1
git branch -d br1
или 
git branch -D br1

Отмечу, что команды не раскрытые в данной статье упоминались ранее.