Ветвления
Переход по веткам возможен при полном 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
Перебазирование
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 было бы правильнее, но мне пока что проще через консоль.
>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, все коммиты будут идти в нее.
Клонируем репозиторий на тестовый сервер, смотрим список веток. И не видим ветку upd-git-1, возможно потому что в ней нет ни одного коммита.
git branch
* master
В VSC сохраняем изменения. Появляется сообщение об отсутствии удаленной ветки.
На 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 перед созданием новой ветки!
No Comments