Пример того, как смерджить бранч из девелоп-ветки в мастер, с сохранением всех коммитов и истории.
Переключаемся на мастер, потягиваем последние изменения:
$ git checkout master $ git pull Already up to date.
Переключаемся на бранч, который будем мерджить в master, в данном примере это LTHS-380_Update_build_deploy_to_compose:
[simterm]
$ git checkout LTHS-380_Update_build_deploy_to_compose M scripts/api_start.sh M terraform/terraform-cn.sh Switched to branch 'LTHS-380_Update_build_deploy_to_compose' Your branch is up to date with 'origin/LTHS-380_Update_build_deploy_to_compose'.
[/simterm]
M
после чекаута указывает на то, что файл был modified:
M
= modifiedA
= addedD
= deletedR
= renamedC
= copiedU
= updated but unmerged
Но тут эти изменения не нужны, коммитить их не надо, продолжаем.
Подтягиваем последние изменения в девелоп-бранче:
[simterm]
$ git pull Already up to date.
[/simterm]
Тут изменений нет.
Мержим изменения из мастера в девелоп бранч, что бы сохранить все изменения и решить конфликты, если будут, в девелоп-бранче:
[simterm]
$ git merge master Already up to date.
[/simterm]
Тут изменений в мастере не было, потому up to date, идём дальше.
Переключаемся на мастер:
[simterm]
$ git checkout master
[/simterm]
Мерджим в него изменения из девелоп-ветки:
[simterm]
$ git merge -m "compose migration complete" --no-ff LTHS-380_Update_build_deploy_to_compose Removing terraform/files/userdata/eureka.sh Removing terraform/eureka.tf Removing packer/eureka/template.json Removing packer/eureka/app.sh Merge made by the 'recursive' strategy. packer/api/app.sh | 1 + packer/api/docker-compose.yml | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ packer/api/template.json | 8 +++++++- packer/eureka/app.sh | 11 ----------- packer/eureka/template.json | 35 ----------------------------------- terraform/api.tf | 35 ----------------------------------- terraform/eureka.tf | 91 ------------------------------------------------------------------------------------------- terraform/files/userdata/api.sh | 37 ++++--------------------------------- terraform/files/userdata/eureka.sh | 8 -------- terraform/security_group_api_elb.tf | 74 +------------------------------------------------------------------------- terraform/variables.tf | 3 +++ 11 files changed, 80 insertions(+), 287 deletions(-) create mode 100644 packer/api/docker-compose.yml delete mode 100644 packer/eureka/app.sh delete mode 100644 packer/eureka/template.json delete mode 100644 terraform/eureka.tf delete mode 100644 terraform/files/userdata/eureka.sh
[/simterm]
Опция --no-f
f, или no fast-forward описана в посте Git: merge – зачем нужна опция –no-ff, no-fast-forward.
Теперь осталось запушить изменения в удалённый репозиторий:
[simterm]
$ git push Counting objects: 1, done. Writing objects: 100% (1/1), 228 bytes | 228.00 KiB/s, done. Total 1 (delta 0), reused 0 (delta 0) To ssh://bitbucket.domain.tld:7999/server-api-infrastructure.git 391c558..1e23693 master -> master
[/simterm]
Проверяем:
Теперь соберём всё вместе:
git checkout master
// переключаемся на мастер, в который будем делать мерджgit pull
// подягиваем последние измененияgit checkout develop
// переключаемся на бранч, который будем мерджить в мастерgit pull
// подтягиваем последние измененияgit merge master
// мерджим мастер в девелоп-бранч, решаем конфиликты, если есть, в девелоп бранчеgit checkout master
// переключаемся на мастерgit merge -m "merge message" develop
// мерджим изменения из девелопа в мастер, можно добавить--no-ff
git push
// пушим мастер в репозиторий
Если работа над задачей, для которой создавался бранч, закончена — то можно добавить git тег и удалить бранч.
В таком случае процесс будет таким:
git checkout master
// переключаемся на мастер, в который будем делать мерджgit pull
// подягиваем последние измененияgit checkout develop
// переключаемся на бранч, который будем мерджить в мастерgit pull
// подтягиваем последние измененияgit merge master
// мерджим мастер в девелоп-бранч, решаем конфиликты, если есть, в девелоп бранчеgit checkout master
// переключаемся на мастерgit merge -m "merge message" develop
// мерджим изменения из девелопа в мастер, можно добавить--no-ff
git tag -a v0.1 -m "tag message"
// добавляем тег на текущее состояние репозиторияgit push origin v0.1
// пушим тегgit branch -d develop
// удаляем develop бранч, при необходимости — восстанавливаем из тегов —git checkout -b develop v1.0
git push
// пушим мастер в репозиторий
Готово.