2016-12-13 6 views
1

私は自分のfeature-branchを持っています。ブランチはmasterにマージされ、エラーが発生した後、マージは元に戻りました。マスターを私のブランチにマージしようとすると、私の変更はマスターによって上書きされます。私の変更は古いものであり、マージするべきではないと思っているかのようです。merge masterを私の機能ブランチに上書きする

私はこのソリューション見つけた:https://raw.githubusercontent.com/git/git/master/Documentation/howto/revert-a-faulty-merge.txt

をしかし、私はそう復帰を元に戻すにしたくない、私の変更をマージする方法はありますか?

答えて

1

はい、リンクしたドキュメントで説明しているように、元の分岐元のコミットにブランチをリベースできます。これにより履歴が書き換えられ、ブランチを再作成することができます。 をgit rebaseに渡す必要があります。それ以外の場合は、早送りして何も変更しません。

だから、ブランチの機能を使っているとしましょう。feature1

$ git show --oneline 
c7058f7 Initial commit 
$ git checkout -b feature1 
$ echo "feature" > feature1 
$ git add feature1 
$ git commit -m "feature1" 
$ git checkout master 
$ git merge feature1 
$ git revert -m 1 HEAD 
$ git checkout feature1 
$ git rebase --no-ff c7058f7 
$ git checkout master 
$ git merge feature1 
$ git log 
commit 9bc0016d5c412ed7b9401bf0fd8fe5519a235a9f 
Merge: fa2b2cb 48e007b 

    Merge branch 'feature1' 

commit 48e007bcef4675981076d84d245a2a489340a509 

    feature1 

1 file changed, 1 insertion(+) 

commit fa2b2cbe4192a80d3c660f84f9d5f4ba4a7f7ba7 

    Revert "Merge branch 'feature1'" 

    This reverts commit 578502c12340f5ba7df47976d9e22245b5e9d8f8, reversing 
    changes made to c7058f7f1dbf6409bfbc44a61eda1adf1155a981. 

1 file changed, 1 deletion(-) 

commit 578502c12340f5ba7df47976d9e22245b5e9d8f8 
Merge: c7058f7 7b4690e 

    Merge branch 'feature1' 

commit 7b4690e19b45a089bc0db44cf66ebfa3495e48f9 

    feature1 

1 file changed, 1 insertion(+) 

commit c7058f7f1dbf6409bfbc44a61eda1adf1155a981 

    Initial commit 

これはHow to revert a faulty mergeに要約されている: 次のワークフローを示し

をしかし、あなたがしなければ、実際に、あなたのようにそれを再作成するためにいくつかの 方法を必要とする、Aをコミット変更する必要はありません同じ変更を加えた新しいコミット。

$ git rebase [-i] --no-ff P 

--no-ffのオプションはすべて、新しいコミット を持つ新しいブランチA'-B'-C」を作成します(: リベースコマンドの--no-ffのオプションは、これを行う方法を提供しますすべてのSHA IDが異なる場合) 実際にはコミットBを変更するだけです。この新しいブランチ をメインラインブランチに直接マージして、 ブランチの変更をすべて取得するようにしてください。

に余分なコミットを追加するだけで--no-ffを使用することもできます。のは、このHOWTOの 開始時に議論の状況を再検討してみましょう:

P---o---o---M---x---x---W---x 
\  /
    A---B---C----------------D---E <-- fixed-up topic branch 

この時点で、あなたはトピックブランチを再作成する--no-FFを使用することができます。

A'---B'---C'------------D'---E' <-- recreated topic branch 
/
P---o---o---M---x---x---W---x 
\  /
    A---B---C----------------D---E 
を得
$ git checkout E 
$ git rebase --no-ff P 

コミットWを元に戻すことなく、再作成されたブランチをメインラインにマージすると、メインラインの履歴は次のようになります。

A'---B'---C'------------D'---E' 
/       \ 
P---o---o---M---x---x---W---x---M2 
\  /
    A---B---C 
関連する問題