私は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
しかし、それは、これを処理するための「正しい」方法のように見えるしていません。助言がありますか?場合
私は同意します(ただし、@ellothethの答えは状況によってはよりエレガントかもしれません)。 git自身の[分岐哲学](http://gitster.livejournal.com/42247.html)によれば、実際にははであり、このコミットはすべてのブランチに属する唯一のものです。ですから、チェリーピッキングはそれを「言う」ものです。 –
ありがとう、私はそれが理にかなっていると思う。 Subversionから来て、時には私たちがトランクとブランチ(基本的に修正を2回行っています)に修正プログラムを適用するのがどれほど苦労していたのか、私は自分が望む場所に機能ブランチをマージできると思っていました。それが私が期待したようにうまくいかなかったとき、私はちょっとうんざりでした。 「チェリーピック」はセンスがあります。私は、すべての開発者が理解しやすいプロセスを考え出す必要があります。これはかなり明確にできると思います。 –