2017-11-09 8 views
0

最初はメインのメインブランチから分岐した2つの独立した開発ブランチの作業を終了しました。だから、もともと私はMasterから分岐してDevelopBranch1を作成Git 2つの開発ブランチ間のマージと補完

Master 
    |--> DevelopBranch1 
      | 
      -->DevelopBranch2 

:ここで私はこれらの2枝を開発作成するために、マスター支店の分岐に使用される流れがあります。その後、私はを作り、DevelopBranch1から分岐しました。この決定の背後にある理由は、DevelopBranch2DevelopBranch1の新しい変更に依存していたためです。

DevelopBranch1への変更が完了しました。 DevelopBranch2はもともとMasterの分岐していないので、私は今、いくつかのことをしたい:

1))Master

3にMaster

2)親の変更DevelopBranch2DevelopBranch1をマージMaster

DevelopBranch2をマージ

4)アーカイブDevelopBranch1

I DevelopBranch1Masterにマージすると成功しましたSourceTreeMasterをチェックアウトし、最新のコミットでDevelopBranch1からマージすることで成功しました。

私がステップ2に行ったとき、これが問題に遭遇しました。私は親の変更に次のgitコマンドを使用:

git checkout master 
git rebase --onto DevelopBranch2 

をリベースコマンドの後、私は、最新のMasterからコミットがDevelopBranch2内コミット最新に移動してしまったことをSourceTree以内に気づきました。

この時点で、MasterDevelopBranch2にマージしようとしました。このマージを使用してgit statusを実行した後、私はその後、git pullを走った次のメッセージ

On branch master 
Your branch and 'origin/master' have diverged, 
and have 5 and 7 different commits each, respectively. 
    (use "git pull" to merge the remote branch into yours) 

を持って、このメッセージが表示されました:私は現在、こだわっているところ

git pull 
error: Pulling is not possible because you have unmerged files. 
hint: Fix them up in the work tree, and then use 'git add/rm <file>' 
hint: as appropriate to mark resolution and make a commit. 
fatal: Exiting because of an unresolved conflict. 

これがあります。

ご協力いただければ幸いです!

+0

非常に古いGit(例:1.7.x)を使用していない限り、 'git status'の出力とその後のマージされていないファイルに関する苦情は正しく混合されていないようです。このような古代人のGitを持っていれば、これはすべて意味があります。 – torek

+0

@torekこの変更を元に戻すには、git reset --hard masterを使用してください。https://stackoverflow.com/questions/2452226/master-branch-and-origin-master-have- diverged-how-to-undiverge-branches私は、問題を解決するために 'git rebase'を正しく使用していると思います。 –

+0

一般的に、 'git reset -hard'には非常に注意が必要です。私はちょうど求めているべきことである:*あなたが実行しているのGitのバージョン* – torek

答えて

1

間違って使用されたコマンドgit rebase --onto DevelopBranch2が原因です。STEP1後

MasterDevelopBranch1をマージ)、コマンド履歴は次のとおりです:のは、グラフの下にすることにより説明してみましょう

...---A---B---C-------J  Master 
      \  /
      D---F---G DevelopBranch1 
       \ 
        H--I DevelopBranch2 

コマンドgit rebase --onto DevelopBranch2を使用している場合、それは以下のようにDevelopBranch2に現在のブランチMasterをリセットします。あなたの状況については

...---A---B---C-------J  
      \  /
      D---F---G DevelopBranch1 
       \ 
        H--I DevelopBranch2, Master 

、あなたの代わりにgit rebase --onto Master DevelopBranch1 DevelopBranch2を使用する必要があります。その後、DevelopBranch2Masterブランチが期待どおりに変更されます。

最初に、Masterブランチをマージコミット(コミットがDevelopBranch1にマージされてMasterにマージされた)にリセットしてから、再度step2のコマンドを実行してください。次のように使用されるコマンド:

git checkout Master 
git reset --hard <merged commit id> 
git rebase --onto Master DevelopBranch1 DevelopBranch2 
git push origin DevelopBranch2 -f 

次に、ステップ2が正しく実行されます(下のグラフ)。そして、step3とstep4を続けて実行できます。

+0

これはまさに私が必要としていたものでした!これは素晴らしい解説です。詳細を述べることに時間を割いていただきありがとうございます。私はこれがこの問題に遭遇する他の人にも役立つことを願っています! –

関連する問題