Я пытаюсь обернуть голову вокруг ветвящихся моделей git. Я смотрел на http://nvie.com/posts/a-successful-git-branching-model/ для некоторых идей и, исходя из Subversion, я действительно с нетерпением ждал перемен в одном место и объединить его со всеми ветвями, которые в нем нуждались. В Subversion мы закончили работу с большой копией кода.
Однако я до сих пор не понимаю этого полностью. Вот стандартный тип рабочего процесса, который у меня есть, и он всегда будет иметь конфликты.
# create new version branch
git checkout master
git checkout -b v3
vim pom.xml # change branch version to "3.1-SNAPSHOT"
git commit -a
git checkout master
vim pom.xml # change master version to "4.0-SNAPSHOT"
git commit -a
Итак, мастер находится в 4.0-SNAPSHOT, а ветвь - 3.1-SNAPSHOT.
Не хочу создать исправление на ветке и переместить его в тулбар.
git checkout v3
git checkout -b hotfix
vim file.txt # make a bugfix change
git commit -a
git checkout v3
git merge hotfix # this works fine
git checkout master
git merge hotfix # this has a conflict since both branches have changed the version
Я понимаю, почему это происходит, и это имеет смысл. Есть ли лучший способ сделать это?
Я прочитал про вишневый кит, который я тестировал и работает:
git checkout v3
git cherry-pick a518b0b75eaf28868
git checkout master
git cherry-pick a518b0b75eaf28868
Однако это не похоже на "правильный" способ справиться с этим. Любые предложения?