2017-02-16 9 views
2

混乱しているタイトルのため申し訳ありませんが、私はより良いものを考え出すことができませんでした。git:以前のマージを元に戻したブランチからのマージ変更

ここに私の問題があります。私は2つの支店、developfeatureを持っています。 、いくつかの無関係なコードを書くとdevelopに直接コミットマージ

  • を元に戻す
  • developバグを発見にfeature
  • マージfeature

    1. 書き込みコード:私は、このプロセスに従いました。

    ここで私が直接行った変更をdevelopにマージしてfeatureに戻したいと思います。問題は、私がそれをすると、以前に行ったすべての変更を吹き飛ばすことです。feature。これは、手順3の復帰がfeatureのコード変更よりも新しいため、変更を元に戻すために発生します。

    私は何をしようとすることは可能ですか?私が考えることができる唯一の事は、developの復帰を元に戻し、その後復帰の復帰を元に戻すことです。それは厄介なようです。元に戻すにはコミットし、完全含む行を削除します。すなわち、

    1)developのインタラクティブなリベースを行うと、元に戻すにはコミット削除

    git rebase -i HEAD~6 # or however far back is the merge commit 
    

    を:

  • +0

    私はこれで問題が解決しないと思うhttps://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt – torek

    答えて

    2

    は、私はあなたが二段階で状況を是正することができると思いますリベース。この時点で、developは元のマージコミットを持ちますが、元に戻すことはできません。

    2)developfeatureの両方が由来するコミットのハッシュを指定して、developにリベースします。デフォルトでは、リベース、マージは完全にコミット無視することにより、それを削除します:

    git checkout feature 
    git rebase <SHA-1> 
    

    ここ<SHA-1>がコミットそこfeatureからですdevelopから分岐。

    これら2つの手順の後、developブランチはマージコミットもリバートコミットもなく、featureに安全にマージする必要があります。

    私はこの質問に@torekによって与えられた答えを読んで強くをお勧めします

    Accidentally merged in wrong branch to mine. Is there a way to remove these unwanted files?

    1

    は、通常は、機能ブランチを作成し、あなたの機能を完了するために、そのブランチで作業します。次に、あなたの機能を開発ブランチにマージし、しばらくして開発ステートが稼動します。

    開発ブランチを変更した場合、機能ブランチのリベースが好きです。その後、すべての変更が加えられ、フィーチャーブランチがdevブランチの最後のコミットに書き換えられます。

    Atlassianには、機能ブランチの使用方法に関する良いチュートリアルがあります。

    https://www.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow

    +0

    を参照してください。なぜ私たちは_feature_に_develop_をrebaseして、前者から後者にコミットするのでしょうか? –

    +0

    あなたの開発ブランチと同じ状態にあなたの機能ブランチをリベースする必要はありません。あなたはすべての新しい変更を行い、あなたはその新しいポジションから新しいブランチを作成したように見えます。 – Stony

    +0

    はい、これは復帰をもたらさないので、 'feature'ブランチで彼の他の作業を消去しませんか?悪いマージを取り除かない限り、この現象が起きることなく、「開発」が「フィーチャー」と対話する方法はありません。 –

    関連する問題