Исправление слияния Git с несколькими ветками

Я пытался окунуться в модели ветвления 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

. Однако это не похоже на «правильный» способ справиться с этим. Какие-либо предложения?

22
задан Chuck M 25 May 2012 в 21:04
поделиться