2011-06-17 9 views
5

masterslaveという2つのブランチがあり、同じファイルと同じ行を編集するとします。最初に、ファイルの内容がGitでマージした後にパッチを再フォーマットするには?

foo bar 

あるブランチslave

foo bar baz 

になるように編集された後、今のブランチslaveのユーザーは、パッチ(git format-patch master)をフォーマットし、それをユーザーに送信します支店のmaster。ブランチmasterで同じファイルを編集し、

foo bar spam eggs 

になっているのと同じ時間では、パッチが適用できない、とmasterは、新しいパッチをマージして作るためにslaveを要求します。 masterslaveにマージされ、競合が解決されたら、パッチを再フォーマットします。コミットグラフは次のようになります。

slave:    master: 

foo bar baz spam eggs 
    |    \ 
    |    \ 
    |    foo bar spam eggs 
    |     | 
foo bar baz    | 
     \     | 
     \    | 
     +--------- foo bar 

最新のコミットのようslaveに(マージする)になります。私たちは今、git format-patch masterを実行する場合

@@@ -1,1 -1,1 +1,1 @@@ 
- foo bar baz 
-foo bar spam eggs 
++foo bar baz spam eggs 

しかし、我々は以前と同じように正確に同じパッチを取得し、これは、マージと競合の解決を考慮していません。

@@ -1 +1 @@ 
-foo bar 
+foo bar baz 

最新のマスタに適用されるパッチをどのようにフォーマットしますか?私はrebaseなしでそれをしたいと思います。

更新:git format rev1..rev2rev1rev2はそれぞれmastercustom支店のヘッドで、紛争解決に関連する変更が含まれていません。 git-diffは有効なパッチをフォーマットしますが、コミットメッセージは省略します。

答えて

1

なぜパッチを使用していますか?あなたはレポを押して引っ張るべきです。

マージはパッチを作成できるものではありません。最初の親だけに従います。 git diffを使用してパッチをフォーマットし、2つの異なるコミットを区別するように指定することで、必要なものを得ることができます。

これが役に立ちます。

+0

パッチを使用します。これはアップストリームが望んでいるものであり、ワークフローを制御していないためです。紛争解決を考慮したパッチをフォーマットする必要があります。なぜなら、私のリポジトリも公開し、再頒布できないからです。 'git diff'は残念ながらコミットメッセージを含んでいません。 – sastanin

+0

マージに親が1つしかないようにする方法があります。そのパッチから、必要な結果が得られます。 –

+0

ただ1つの親とマージしますか?どのように可能ですか? 'git-merge'は「開発の歴史を2つ以上一緒にする」とされていませんか? – sastanin

関連する問題