122

私は2つのリポジトリを持っています。1 つは、 file に変更を加えることです./hello.test。変更をコミットし、そのコミットからパッチを作成しgit format-patch -1 HEADます。これで、hello.test と同じ内容のファイルを含む 2 番目のリポジトリができましたが、別の名前で別のディレクトリに配置されています./blue/red/hi.testhi.test前述のパッチをファイルに適用するにはどうすればよいですか? 私は試しgit am --directory='blue/red' < patch_fileましたが、もちろん、ファイルの名前が同じではないという不平を言います(Gitは気にしないと思いましたか?)。おそらく差分を編集してその特定のファイルに適用できることはわかっていますが、コマンドソリューションを探しています。

4

6 に答える 6

123

を使用してパッチを作成git diffし、ユーティリティを使用して適用patchできます。これにより、差分を適用するファイルを指定できます。

例えば:

cd first-repo
git diff HEAD^ -- hello.test > ~/patch_file

cd ../second-repo
patch -p1 blue/red/hi.test ~/patch_file
于 2013-05-13T16:38:33.317 に答える
68

手動でパッチを編集したり、外部スクリプトを使用したりしない簡単な解決策があります。

最初のリポジトリで (これはコミットの範囲をエクスポートする場合もあり-1ます。1 つのコミットのみを選択する場合に使用します):

git format-patch --relative <committish> --stdout > ~/patch

2 番目のリポジトリで:

git am --directory blue/red/ ~/patch

--relativeinを使用する代わりに、同様の質問への回答で述べられているように、オプション inを使用してパッチのパスからディレクトリを削除git format-patchする別の解決策があります。-p<n>git amn

git format-patch --relative <committish>なしで実行することも可能で--stdout、一連の.patchファイルが生成されます。git amこれらのファイルは、で直接フィードできますgit am --directory blue/red/ path/to/*.patch

于 2015-04-27T06:36:07.690 に答える