# Ветвления Переход по веткам возможен при полном commit текущей рабочей версии
КомандаДоп. параметрыОписание
git branch список локальных веток
-aсписок удаленных (в смысле на сервере git) веток
<name> добавление ветки
-d hotfix Удаление ненужной ветки
--merged --no-merged список слитых веток список не слитых
--move bad-branch-name corrected-branch-name переименование
git checkout <name>· переключение на ветку
-b <name>создание ветки и переключение на нее
-- fnameВосстановить состояние файла fname
git push --set-upstream origin corrected-branch-name сохранение переименования
origin --delete master удаление ветки на удаленном сервере
git log --oneline --decorate --graph --all очень важная команда
**Слияние веток**
КомандаОписание
git checkout masterПереключение в ту ветку, которую нужно обновить
git merge hotfix1 объединение текущей ветки с веткой hostfix1
В файлах, содержащих разную информацию, появятся строки, показывающие различия. Нужно удалить все различия, вставив новый (или куски старого) текст, добавить файл (git add…) и закоммитить. После отработки всех ошибок будет слито в новый commit **Перебазирование** ```bash git checkout experiment git rebase master git checkout master git merge experiment ``` В случае конфликта исправляем и добавляем файл git add (без коммита!), затем git rebase --continue Перебазирование в случае 3 веток, ответвление 3 было от 2 ветки, но в основную ветку нужно добавить изменения 3 ветки, вторую пока что не трогать ``` git rebase --onto master server client ``` **Примеры.** **Однократное ветвление в VSC** Стартовые условия: - Два git клиента - ПК для разработки с VSC и тестовый сервер. - Текущий commit полностью соответствует commit на сервере. Думаю, что через интерфейс VSC было бы правильнее, но мне пока что проще через консоль. ```bash >git checkout -b upd-git-1 Switched to a new branch 'upd-git-1' >git push -u origin upd-git-1 ``` После этого в VSC в разделе git изменилось имя ветки на upd-git-1, все коммиты будут идти в нее. [![git-checkout-1.JPG](http://bobrobotirk.ru/uploads/images/gallery/2025-04/scaled-1680-/git-checkout-1.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-04/git-checkout-1.JPG) Клонируем репозиторий на тестовый сервер, смотрим список веток. И не видим ветку upd-git-1, возможно потому что в ней нет ни одного коммита. ```bash git branch * master ``` В VSC сохраняем изменения. Появляется сообщение об отсутствии удаленной ветки. [![git-checkout-2.JPG](http://bobrobotirk.ru/uploads/images/gallery/2025-04/scaled-1680-/git-checkout-2.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-04/git-checkout-2.JPG) На gitverse в разделе Ветки появляется имя ветки и отображается commit. Но git branch на тестовом сервере все равно не показывает дополнительные ветки. Смотрим удаленные ветки и переключаемся на нее. Теперь git branch выдает состояние нужной ветки. ``` git branch * master git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/upd-git-1 sergey@jenkins:~/projects_ogrinizer$ git checkout remotes/origin/upd-git-1 sergey@jenkins:~/projects_ogrinizer$ git branch * (HEAD отделён на origin/upd-git-1) master ``` Чтобы связать локальную ветку и удаленную ветку, сначала локальную ветку нужно создать. Поэтому на тестовом сервере создаем ветку (можно с другим именем, но проще одинаковые имена) ``` git checkout -b upd-git-1 Switched to a new branch 'upd-git-1' ``` Теперь связываем ветки ``` git branch --set-upstream-to remotes/origin/upd-git-1 ``` Теперь работают pull ``` git pull Обновление 86a0c85..d813524 Fast-forward compose-files/Dockerhub/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ``` Теперь делаем слияние веток ``` git branch master * upd-git-1 git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. D:\projects\projects_ogrinizer>git pull Already up to date. D:\projects\projects_ogrinizer>git merge upd-git-1 Updating 436f79a..c889934 Fast-forward compose-files/Dockerhub/.env | 3 ++- compose-files/Dockerhub/docker-compose.yaml | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) D:\projects\projects_ogrinizer>git push Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To https://gitverse.ru/bobrobot/projects_ogrinizer.git 436f79a..c889934 master -> master ``` Предыдущий вариант полностью переносит ветку со всеми коммитами. Однако можно объединить обновление в один большой коммит: ``` git checkout master git pull git merge --squash upd-hub-1 git commit -m "Итоговое обновление из ветки upd-hub-1" git push ``` На удаленной машине обязательно перейти на ветку master перед созданием новой ветки!