2010-11-30 13 views
1

に収束する枝は、私が現在のgitで次のよう持って言う:Gitは:単一コミットオブジェクト

master 
    O 
    | 
    o <-- commit objects on master branch 
    | 
    o -- O <-- new branch: featureX 
     | 
     o <-- commit objects on the featureX 
     | 
     o 

だから私はmaster支店で開始し、2つのコミットした後、私はfeatureXに分岐しました。

今度は、featureXで2回コミットした後、masterと収束し、featureXの最後のコミットからmasterで作業を続けます。

これは私がmasterfeatureXの間でファイルをマージしますがmasterfeatureXに行われたすべてのコミットを転送し、最後のものがfeatureXに行われたコミットからmasterに作業を続けたくないことを意味します。

は基本的に、このような何か:

master 
    O 
    | 
    o <-- commit objects on master branch 
    | 
    o -- O <-- new branch: featureX 
     | 
     o <-- commit objects on the featureX 
     | 
    o -- o <-- move everything back to master 
    | 
    o <--continue working on master 

は、私はこのためにに必要な手順を教えてください。

ファイルをまとめてマージしたくないということに注意してください。ちょうどmasterのものを上書きします。また、featureXで作業している間は、masterで作業が行われていないと仮定することもできます。

+0

あなたが持っている答えを説明する重要なことは、あなたのアスキーアートの歴史は、それほど描かれていませんが、厳密に線形であることです。コミットはブランチについて何も知らず、彼らは親が誰であるかを知っているだけです。 – Cascabel

答えて

4

他の作業がfeatureXのために分岐するので、マスター上で行われていない場合:

git checkout master 
git merge featureX 

これは、それはあなたが望む何をすべきマージ「早送り」となります。上記の後、あなたは:

git branch -d featureX 

古いブランチを削除することができます。

+2

'git checkout master; git reset featureX'も動作し、マージを行うことはありません –

+0

'merge'はファイルを一緒にマージしようとしませんか?私は 'master'のファイルを完全に上書きしたいです。 –

+3

@Andreas Grech:gitは、2つの分岐するブランチのファイルが変更されたときにファイルを調べるだけです。それ以上のコミットがないので、featureXがどこから分岐したのか分かれていません。マージの変更はありません。したがって、競合はなく、ファイルレベルでは何もしません。 Gregの説明によると、あなたのmasterブランチがfeatureXの現在のところに移動するのは早送りマージです。比較的最近のgitを持っているなら、安心できるように 'git merge -ff-only featureX'を実行して、マージが早送りの場合にのみ起こるようにしてください。 –

関連する問題