master
とslave
という2つのブランチがあり、同じファイルと同じ行を編集するとします。最初に、ファイルの内容がGitでマージした後にパッチを再フォーマットするには?
foo bar
あるブランチslave
に
foo bar baz
になるように編集された後、今のブランチslave
のユーザーは、パッチ(git format-patch master
)をフォーマットし、それをユーザーに送信します支店のmaster
。ブランチmaster
で同じファイルを編集し、
foo bar spam eggs
になっているのと同じ時間では、パッチが適用できない、とmaster
は、新しいパッチをマージして作るためにslave
を要求します。 master
がslave
にマージされ、競合が解決されたら、パッチを再フォーマットします。コミットグラフは次のようになります。
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..rev2
、rev1
とrev2
はそれぞれmaster
とcustom
支店のヘッドで、紛争解決に関連する変更が含まれていません。 git-diff
は有効なパッチをフォーマットしますが、コミットメッセージは省略します。
パッチを使用します。これはアップストリームが望んでいるものであり、ワークフローを制御していないためです。紛争解決を考慮したパッチをフォーマットする必要があります。なぜなら、私のリポジトリも公開し、再頒布できないからです。 'git diff'は残念ながらコミットメッセージを含んでいません。 – sastanin
マージに親が1つしかないようにする方法があります。そのパッチから、必要な結果が得られます。 –
ただ1つの親とマージしますか?どのように可能ですか? 'git-merge'は「開発の歴史を2つ以上一緒にする」とされていませんか? – sastanin