git format-patchで生成されたパッチを適用する方法は?


221

2つのgitローカルリポジトリがあり、どちらも同じリモートリポジトリをポイントしています。

1つのgitリポジトリでを実行git format-patch 1する場合、そのパッチを他のリポジトリに適用するにはどうすればよいですか?

回答:


330

注:まず、パッチが何を行うかをプレビューできます。

最初の統計:

git apply --stat a_file.patch

次に、エラーを検出するための予行演習:

git apply --check a_file.patch

最後に、を使用git amしてパッチをコミットとして適用できます。これにより、適用済みのパッチをサインオフできます。
これは、後で参照するときに役立ちます。

git am --signoff < a_file.patch 

この記事の例をご覧ください。

gitログで、コミットメッセージに「Signed-off-by」タグが含まれていることがわかります。このタグは、Githubやその他のユーザーによって読み取られ、コミットがコードでどのように終了したかについての有用な情報を提供します。

例


9
自己紹介:200番目のグレートアンサーゴールドバッジ。
VonC

4
git am < somepatch.patch「致命的:空のID名(<>用)は許可されていません」が生成されます。なぜ誰かが私に説明できますか?
gromit190

@ gromit190 Authorは、パッチの不正なヘッダーを意味し、および/またはそうではありませんでしたgit config user.{name,email}
ulidtko

OK; git apply --check言うpatch does not apply、とgit apply -3言うrepository lacks the necessary blob to fall back on 3-way merge.コミットをリベースすることは、このような風で、gitのでは。しかし、更新されたコードの上にパッチリベースするにはどうすればよいでしょうか?
ulidtko

1
@ulidtkoたぶんstackoverflow.com/a/15375869/6309
VonC

162
git apply name-of-file.patch

25
これは元の詳細な質問には答えていなかったかもしれませんが、タイトルにある質問に答えたので、このページにいます。ありがとうございました!
ロックリー

12
これは古い質問と回答であることを理解しています...しかし、一部の人にとっては、 、git applyとgit amの違い
mgarey 2017

1
git apply "[...ファイルへのフルパス...] / name-of-file.patch"
Anton Lyhin

41

または、古い学校を蹴っている場合:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
ちょうどあなたが知っているように:それはコミットを作成しないので、それはコミットメッセージと作者情報を失うでしょう。
シーザー

22

最初に、両者の違いについてメモを取る必要がありますgit amとのgit apply

使用しているgit amときは、通常、多くのパッチを適用する必要があります。したがって、使用する必要があります:

git am *.patch

あるいは単に:

git am

Gitは自動的にパッチを見つけて順番に適用します;-)

UPD
ここでは、そのようなパッチを生成する方法を見つけることができます


1
違いのこの説明に使用するために私を助けたgit apply...とで--reverse:-)👍
ヨルダンジー


14

JetBrains IDE(IntelliJ IDEA、Android Studio、PyCharmなど)を使用している場合は、パッチファイルをドラッグしてIDE内にドロップすると、パッチの内容を示すダイアログが表示されます。「パッチの適用」をクリックするだけで、コミットが作成されます。


1
これをありがとう。これは誰にとっても本当に便利です。受け入れられた答えがあります。これも便利です。
Lasitha Benaragama

1
@ambaroxしかし、この回答は一度反対投票されました、理由はわかりません
ice1000

1
パッチを適用する唯一の方法はコマンドラインを介することだと誰かが思うかもしれません。:D私はあなたに賛成票を与えました。歓声メイト。
Lasitha Benaragama

1
@LasithaBenaragama-一種。SOは、OPを支援するだけでなく、フォローするすべての人を支援することを目的としています。この回答は(有用ではありますが)一般的な解決策を提供するものではありません。これは優れた小さなブログ投稿になりますが、「それほど良い」答えにはなりません。反対票を説明します!
OldTinfoil

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.