5

と の 2 つのブランチがmasterありslave、同じファイルと同じ行を編集するとします。まず、ファイルの内容は

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次のようになります。

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

ただし、ここで を実行するgit format-patch masterと、マージと競合の解決が考慮されていない、以前とまったく同じパッチが得られます。

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

最新のマスターに適用されるパッチをどのようにフォーマットしますか? 無しでやってみたいrebaseです。

更新:git format rev1..rev2ここで、rev1とはそれぞれとブランチrev2のヘッドであり、競合の解決に関連する変更は含まれていません。有効なパッチをフォーマットしますが、コミット メッセージを省略します。mastercustomgit-diff

4

1 に答える 1

1

なぜパッチを使用しているのですか?リポジトリ間で押したり引いたりする必要があります。

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

お役に立てれば。

于 2011-06-18T00:06:41.890 に答える