web-dev-qa-db-ja.com

パッチを適用するとき、競合を解決する方法はありますか?

私は窓の上にいます。

さまざまな理由から、異なるsvnブランチの複数のgitインスタンスがあります。

多くの場合、リポジトリAの問題を修正し、パッチを生成し、リポジトリBに適用します。これは、競合がある場合を除き、正常に機能します。

リベースするときは、フォルダを右クリックし、tortioseGitを使用して解決オプションを選択します。これにより、競合を解決するための素敵なGUIが表示されます。

拒否されたパッチチャンクでこれを達成する方法はありますか?

パッチを作成/適用する現在のアプローチは次のとおりです。

git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch
110
Kenoyer130

パッチを生成するには、次の手順を実行します。

git format-patch --stdout first_commit^..last_commit > changes.patch

パッチを適用する準備ができたら:

git am -3 < changes.patch

競合がある場合、-3は3者間マージを行います。この時点で、GUIにアクセスする場合、またはvimを使用して手動でファイルをマージする場合は、git mergetoolを実行できます(標準の<<<<<<||||||>>>>>>競合解決)。

216
g19fanatic

パッチの適用、リベース、またはマージ時に同じ競合セットに頻繁に遭遇する場合は、git rerere(記録された解像度の再利用)機能を使用できます。これにより、過去の競合の解決方法に基づいて、競合の解決方法を事前に定義できます。この仕組みの詳細については、 http://git-scm.com/blog/2010/03/08/rerere.html をご覧ください。

10
mplf

TortoiseGitには、パッチファイルを開くことができるマージ機能があります。

その写真があります こちら

3
ams

私のアプローチは:

  • ファイルが同一の「統合」ブランチを作成する
  • この統合ブランチにパッチを適用します
  • マスターにマージまたはリベースします(リパッチがここで役立つかどうかはわかりません。これ以上パッチを適用するとどうなるかわかりません)
1
MichiBack