2017-06-27 10 views
0

数週間前に私は開発支店から分岐して物語を作った(Agile term)。最近、リリースマネージャは、機能に関連するすべてのブランチを機能ブランチの子にすることに決めました。既存支店を新しい支店の子にする方法

develop 
    | 
    ---> Feature 
     | 
     ---> My Branch 

EDIT

develop 
    | 
    ---> My Branch 
    | 
    ---> Feature 

からを取得する簡単な方法があり、私は枝が実際に親/子関係を持っていないことを認識していませんでした。これは私のSOの投稿の半分の傾向が私をまっすぐに無知にしてくれます。私は答えを感謝します。彼らは私が良い道を見つけるのを助けました。

+1

Gitのブランチでは、親子関係はありません。コミットだけに親子関係があります。これらは、コミットを行うと固定されます(コミットは永続的で変更できないため)。 'git rebase'のようなコミットの連鎖を*コピー*してブランチラベルを新しいコピーのほとんどを指すようにすることができます(' git rebase'も同様です)。それはあなたが探しているものかもしれません。 – torek

+0

それを希望のブランチにリベースします。 – EvgenyKolyakov

答えて

1

何かをする必要がある場合は、rebase(他の人が示唆しているように)はおそらく何をするのでしょうか。

しかし、何もする必要はありません。

"親ブランチ"のような概念に抱かれている人は、単にgitには存在しません。 My Branchが作成されたときにあなたがいたブランチの記憶はありません。したがって、コミットトポロジが実際に間違っている場合に限り、何かを行う必要があります。

あなたは

x --- O <--(develop) 

始めて、あなたはあなたの物語のブランチを作成し、そしておそらくいくつかの仕事をしたとします。お使いのリリースマネージャが機能ブランチにグループストーリーが分岐することを決めていなかった場合

x --- O <--(develop) 
     \ 
     A <--(story) 

さて、あなたは最終的に戻ってdevelopからstoryをマージしたいです。しかし、今は機能ブランチを持っていますが、機能ブランチを作成しても、存在するコミットについては何も変更されません。

x --- O <--(develop)(feature) 
     \ 
     A <--(story) 

そして実際に、機能ブランチは、ストーリーの分岐の前に存在していた、とあなたはそれをチェックアウトして使用していた場合でも、あなたの出発点として、あなたがstoryを作成したこと...絵はまったく同じになります。このシナリオでは、実行する必要があるのは、story分岐が完了したときにdevelopの代わりにfeatureにマージすることだけです。 (どちらが、--no-ffを想定し、

x --- O <--(develop) 
     | 
     |-- M <--(feature) 
     \/
     A <--(story) 

を与え、あなたの "見かけ" の分岐階層を持っています。)

これは、あなたがと決して言わなかったとしても、は何も修正する必要がありません。 storyが作成された場所とfeatureが作成された場所の間にdevelopのコミットがあった場合は、featureの指定された分岐点と一貫性を持たせるために、storyを再配置する必要があります。これは、一般的に

rebase --onto feature develop story 

のようになります(そして、理想的に、あなたは一人ひとりの書き換え storyブランチにコミットを再テストする必要があります。あなたはどちらのビルド/テストツールを自動化している場合は、大したことではないはずです。あなたがそうでない場合、あなたは本当に機敏ではありません...)

そして、先に進みます:featureが作成されたら、追加のstoryブランチの開始点として使用することになりますa)featureに他のものを誤って組み込むのを避けるため、(b)storyを012に結合するときの不要なマージの競合を減らす。

+0

ありがとうございます - これに入れても、余計なレベルに感謝します。 –

0

支店は、子供を持っていないが、あなたはMy Branchの祖先であることをFeatureブランチの現在の先端にコミットしたい場合は、まずMy BranchをチェックアウトしてからFeature枝の上にそれをリベースする必要があります。あなたは、この関係を維持したいなら、あなたは再びたびFeature分岐移動をこのリベースを実行しなければならないこと

git checkout My Branch 
git rebase Feature 

注意。つまり、誰かがFeatureブランチにコミットするたびに上記の2つのコマンドを再実行する必要があります。