git
素晴らしいツールです。しかし、それは開発者間の良好なコミュニケーションに取って代わることはできません。
の変更もに含めるmaster
必要があるかどうかを確認する必要がありますfeature
。理想的には、機能ブランチには可能な限り最小限のコードが含まれている必要があります。
変更を絶対に含める必要がfeature
ある場合は、基本的に2つのオプションがありますgit rebase
。そして、git cherry-pick
。から;master
への後方マージを実行できると思います。feature
しかし、それは悪い状況につながる可能性があります...
cherry-pick
HEAD
コメントと作成者情報を保持しながら、特定のコミットまたは複数のコミットを現在のコミットに適用できます。edに成功した後、gitは、にマージして戻ったcherry-pick
ときに2つのコミットが同じであることを知るのに十分賢いです。私たちが話しているコミットがほんの数個であれば、それで十分なはずです。feature
master
cherry-pick
rebase
履歴の別のポイントから開始して、現在のブランチ(コミットの行)を適用できます。ご指摘のとおり、これは、のコピーを既に持っているdeveloper1とdeveloper2にとって厄介な場合がありfeature
ます。彼らはまた、新しい支店rebase
への地元の発展を必要とするでしょう。 feature
いずれにせよmaster
、developer3が直接コミットするのは独自の機能ブランチであり、その機能ブランチはマージされているはずです。その機能ブランチは、feature
必要に応じてマージされている可能性があります。での(最新の)コミットが1つだけであると仮定するとmaster
、次のように状況を修正できます。
# Ensure clean working directory
$ git stash
# Create new branch at master
$ git branch some-descriptive-name master
# Move master back one commit
$ git checkout master
$ git reset --hard HEAD^
# Merge the new branch into master
$ git merge --no-ff some-descriptive-name
# Forcibly update master
# YOU SHOULD COMMUNICATE WITH OTHER DEVS BEFORE DOING THIS
$ git push -f origin master
# Merge the new branch into feature
$ git checkout feature
$ git merge --no-ff some-descriptive-name
この種の「おっと」のことは常に起こる可能性があり、実際に起こるので、私は十分に強調することはできません。
幸運を!
編集:
ingに関する部分は、コミットが数個(または1つだけ)であり、それらすべてがedされるcherry-pick
ことを前提として書かれています。master
cherry-pick
x -- y (master)
\
a -- b -- c (feature)