Пример того, как смерджить бранч из девелоп-ветки в мастер, с сохранением всех коммитов и истории.
Переключаемся на мастер, потягиваем последние изменения:
$ git checkout master $ git pull Already up to date.
Переключаемся на бранч, который будем мерджить в master, в данном примере это LTHS-380_Update_build_deploy_to_compose:
M
после чекаута указывает на то, что файл был modified:
M
= modifiedA
= addedD
= deletedR
= renamedC
= copiedU
= updated but unmerged
Но тут эти изменения не нужны, коммитить их не надо, продолжаем.
Подтягиваем последние изменения в девелоп-бранче:
Тут изменений нет.
Мержим изменения из мастера в девелоп бранч, что бы сохранить все изменения и решить конфликты, если будут, в девелоп-бранче:
Тут изменений в мастере не было, потому up to date, идём дальше.
Переключаемся на мастер:
Мерджим в него изменения из девелоп-ветки:
Опция --no-f
f, или no fast-forward описана в посте Git: merge – зачем нужна опция –no-ff, no-fast-forward.
Теперь осталось запушить изменения в удалённый репозиторий:
Проверяем:
Теперь соберём всё вместе:
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
// пушим мастер в репозиторий
Готово.