私は以下の状況を想定しています:git-rebase:2つの分岐ブランチ/リポジトリが収束します
ユーザFooのリポジトリメインがあります。ユーザーバーがこのリポジトリをフォークするので、両方のリポジトリが同期します。ユーザーバーは機能を実装し、 "barbranch"というローカルブランチを作成します。ユーザーBarがフィーチャの実装を完了するまでに、Fooは何かをコミットしてメインリポジトリにプッシュしました。したがって、基本的に状況は次のようになります。
A---B---C---D main repository
\
E forked repository (where C=E)
\
F barbranch on forked repository
これで、ユーザーFooのレポでどのように元に戻すことができますか?
単純に私が言う:
# switch to the local master and merge barbranch into it
git checkout master
git pull
git pull upstream
git push
git merge barbranch
# merge conflicts occur
vi somefile
git commit -a
git rebase origin master
# this conflict occurs again
vi somefile
git commit -a
git status # says I'm on (no branch) ?!
git push
g it checkout master
# conflict occurs again!
vi somefile
git commit -a
git push
# send merge request to user Foo
最後に、これは私の3つの醜いのコミットの代わりのものを提供します。
私はgit rebase --onto ...
を見つけたgit-rebaseのドキュメントをチェックしています。私は正確なコマンドが何であるかを理解することはできませんが、そのプロセス全体が最後のように見えるでしょう。
ありがとう、ええ、私は "線形化された"バージョンが欲しいです。ちょうど明確にする: 'git fetch upstream'をどのブランチで行うかは重要ですか? "resolve conflicts + commit"の各ステップは、最後に 'vi somefile;があります。 git commit -a'、そう? – user694971
どこからでもフェッチできます。解決方法conflict =( "vi" + "git add resolved_file")を各競合ファイル+最終的な "git commit"で解決します。この方法は、いくつかのファイルが競合しているときに優れています。 "git status"を使ってファイルがまだ解決されていない場合はいつでも知ることができます。 –
これは本当に奇妙です、私は[this](http://pastebin.com/NFirzz6g)のようなメッセージを受け取ります。このブランチは、問題のパッチが承認される前に作成されていますが... – user694971