私はgitブランチモデルに頭を悩ませようとしてきました。私はいくつかのアイデアについてhttp://nvie.com/posts/a-successful-git-branching-model/を見ていて、Subversionから来て、私が本当に楽しみにしていたことの1つは、1か所で変更を加えることでした。それを必要としたすべてのブランチにマージします。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
ただし、これを処理する「正しい」方法とは思えません。助言がありますか?