Last active
March 10, 2019 12:23
-
-
Save ezhov-da/31794fe1caec59b658d423e432cc9f5a to your computer and use it in GitHub Desktop.
git branches
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
https://habrahabr.ru/post/106912/ | |
<pre> | |
Ветви функциональностей (feature branches) | |
Могут порождаться от: develop | |
Соглашение о наименовании: всё, за исключением master, develop, release-* или hotfix-* | |
Создание ветви функциональности (feature branch) | |
При начале работы над новой функциональностью делается ответвление от ветви разработки (develop). | |
$ git checkout -b myfeature develop | |
Switched to a new branch "myfeature" | |
Добавление завершённой функциональности в develop | |
$ git checkout develop | |
Switched to branch 'develop' | |
$ git merge --no-ff myfeature | |
Updating ea1b82a..05e9557 | |
(Отчёт об изменениях) | |
$ git branch -d myfeature | |
Deleted branch myfeature (was 05e9557). | |
$ git push origin develop | |
Флаг --no-ff вынуждает Git всегда создавать новый объект коммита при слиянии, даже если слияние может быть осуществлено алгоритмом fast-forward. Это позволяет не терять информацию о том, что ветка существовала, и группирует вместе все внесённые изменения | |
Ветви релизов (release branches) | |
Могут порождаться от: develop | |
Должны вливаться в: develop и master | |
Соглашение о наименовании: release-* | |
Создание ветви релиза (release branch) | |
$ git checkout -b release-1.2 develop | |
Switched to a new branch "release-1.2" | |
$ ./bump-version.sh 1.2 | |
Files modified successfully, version bumped to 1.2. | |
$ git commit -a -m "Bumped version number to 1.2" | |
[release-1.2 74d9424] Bumped version number to 1.2 | |
1 files changed, 1 insertions(+), 1 deletions(-) | |
Закрытие ветви релиза | |
$ git checkout master | |
Switched to branch 'master' | |
$ git merge --no-ff release-1.2 | |
Merge made by recursive. | |
(Отчёт об изменениях) | |
$ git tag -a 1.2 | |
Чтобы сохранить изменения и в последующих релизах, мы должны влить эти изменения обратно в разработку. Делаем это так: | |
$ git checkout develop | |
Switched to branch 'develop' | |
$ git merge --no-ff release-1.2 | |
Merge made by recursive. | |
(Отчёт об изменениях) | |
Теперь мы окончательно разделались с веткой релиза. Можно её удалять, потому что она нам больше не понадобится: | |
$ git branch -d release-1.2 | |
Deleted branch release-1.2 (was ff452fe). | |
Ветви исправлений (hotfix branches) | |
Могут порождаться от: master | |
Должны вливаться в: develop и master | |
Соглашение о наименовании: hotfix-* | |
Создание ветви исправлений (hotfix branch) | |
$ git checkout -b hotfix-1.2.1 master | |
Switched to a new branch "hotfix-1.2.1" | |
$ ./bump-version.sh 1.2.1 | |
Files modified successfully, version bumped to 1.2.1. | |
$ git commit -a -m "Bumped version number to 1.2.1" | |
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1 | |
1 files changed, 1 insertions(+), 1 deletions(-) | |
Не забывайте обновлять номер версии после создания ветви! | |
Теперь можно исправлять баг, а изменения издавать хоть одним коммитом, хоть несколькими. | |
$ git commit -m "Fixed severe production problem" | |
[hotfix-1.2.1 abbe5d6] Fixed severe production problem | |
5 files changed, 32 insertions(+), 17 deletions(-) | |
Закрытие ветви исправлений | |
Когда баг исправлен, изменения надо влить обратно в главную ветвь (master), а также в ветвь разработки (develop), чтобы гарантировать, что это исправление окажется и в следующем релизе. Это очень похоже на то, как закрывается ветвь релиза (release branch). | |
Прежде всего надо обновить главную ветвь (master) и пометить новую версию тегом. | |
$ git checkout master | |
Switched to branch 'master' | |
$ git merge --no-ff hotfix-1.2.1 | |
Merge made by recursive. | |
(Отчёт об изменениях) | |
$ git tag -a 1.2.1 | |
Следующим шагом переносим исправление в ветвь разработки (develop). | |
$ git checkout develop | |
Switched to branch 'develop' | |
$ git merge --no-ff hotfix-1.2.1 | |
Merge made by recursive. | |
(Отчёт об изменениях) | |
У этого правила есть одно исключение: если в данный момент существует ветвь релиза (release branch), то ветвь исправления (hotfix branch) должна вливаться в неё, а не в ветвь разработки (develop). В этом случае исправления войдут в ветвь разработки вместе со всей ветвью релиза, когда та будет закрыта. (Хотя, если работа в develop требует немедленного исправления бага и не может ждать, пока будет завершено издание текущего релиза, Вы всё же можете влить исправления (bugfix) в ветвь разработки (develop), и это будет вполне безопасно). | |
И наконец, удаляем временную ветвь: | |
$ git branch -d hotfix-1.2.1 | |
Deleted branch hotfix-1.2.1 (was abbe5d6). | |
</pre> | |
<img src="https://habrastorage.org/storage/4bf7e68c/49e29c35/3a01bd6b/782a1be3.png"/> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment