2013-10-18 10 views
9

私はリモートリポジトリを持っています。 私は:矛盾したgit rebaseは動作しません

git clone https://[email protected]/mylogin/myrepo.git 

クローン成功。 私はgit treeを持っています:
C(master)
|         B:A
|    /
B  /
|
A
|
A0
|
A01(原点/ヘッド)(原点/マスタ)
|
(一部のコミット)

私が必要:
                                B:
C(マスター) / 

私はブランチをリベース必要B to C(マスター) 私のやり方:

git checkout b1 
Switched to branch 'b1' 
git rebase master 
First, rewinding head to replay your work on top of it... 
Applying: B:A 
Using index info to reconstruct a base tree... 
M index1.txt 
Falling back to patching base and 3-way merge... 
Auto-merging index1.txt 
CONFLICT (content): Merge conflict in index1.txt 
Failed to merge in the changes. 
Patch failed at 0001 B:A 
The copy of the patch that failed is found in: 
    /pth/to dir/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

git branch 
* (no branch) 
    b1 
    master 

どうすればよいですか? 私はブランチb1を切り替えて、競合を解決してコミットできますが、それは助けにはなりません(私はそれをテストしました)。

答えて

26

Gitは自動的に解決できない競合を検出した場合にリベースを停止します。あなたのケースでは、ファイルindex1.txtに矛盾があります(これは出力に表示され、後でgit statusを実行すると表示されます)。続行する前に、競合を修正する必要があります。ファイルを編集すると、<<<<<<======>>>>>>のマーカーが表示されます。矛盾は、<=の間のものがマスターの変更であり、その後(>まで)ブランチb1の変更であるこれらの行にあります。これを修正し、gitマーカー(<=>)を削除してからgit add index1.txtを実行し、次のファイルに移動します(この例では、index1.txtの競合のみ)。すべてのファイルを追加したら、git rebase --continueを実行してください。 gitが別の競合に遭遇した場合、問題のある各ファイルに対してプロセスを繰り返すだけです。いったん終了すると、gitはrebaseが正常に終了したことを通知し、ブランチb1に戻ります。プロセスを停止して元のb1(rebaseコマンドの前)に戻す場合は、単にgit rebase --abortを実行してください。

競合を修正するときは、最後のコミットになるようにファイルを編集しないでください。そのコミットに必要な変更を導入するだけで十分です。 gitがリベースしてコミットを続けると、他の変更が追加されます。

+0

"ファイルを編集して最終的なコミットにするのではなく、その特定のコミットに必要な変更を導入するだけです" +1。私は、これらのコード行が、私がそれらを変更したときにどうして来たのだろうと思っていました! – Swapnil

+2

'patch'ファイルではなく、競合(あなたの場合は' index1.txt')を使ってファイルを編集する必要があることに注意してください。 'patch'は、どのような変更がリベースされているのか不明な場合に参照するためのものです。 –

関連する問題