最新のgit commitからパッチを作成するにはどうすればよいですか?


186

私は最後に行われたコミットからパッチを作成する魔法のコマンドを探しています。

私のワークフローは時々このようになります

vi some.txt
git add some.txt
git commit -m "some change"

そして今、私は書きたいだけです

git create-patch-from-last-commit-to-file SOME-PATCH0001.patch

しかし、代わりにcreate-patch-from-last-commit-to-file何をそこに置くべきですか?



回答:


297

一般に、

git format-patch -n HEAD^

(多くのオプションのヘルプを確認してください)、それは本当にそれらを郵送するためのものです。単一のコミットの場合

git show HEAD > some-patch0001.patch

使用可能なパッチを提供します。


18
「git show HEAD> some-patch0001.patch」に注意してください。カラーターミナルで呼び出された場合は、カラーエスケープシーケンスもファイルに出力します。
hrach 2013

12
も使用できますgit diff > change.patch。リビジョン範囲も含めることができ、コミットされていない変更のパッチを作成できます。ただし、大きな違いは、バイナリファイルの違いが含まれないことです「git format-patch」と「git diff」の違いは何ですか?の回答を参照してください詳細については。
Rangi Keen

4
@hrachはLinuxにはありません
Robin Green

4
いいえ、それは最初の行が言うことではないので。どちらかgit format-patch -1または動作するgit format-patch -n HEAD^はずです。
役に立たない

4
おかげで、文字通り「n」であることがわかりませんでした。プレースホルダーだと思いました(format-patchには「-n」と「-<n>」の両方のオプションがあります)。
エティエンヌ2016年

60

@Uselessの回答から、最後のコミットのパラメーターなしで一般的な形式を使用して、次のようにファイルに書き込むこともできます。

git format-patch HEAD^ --stdout > patchfile.patch

または、キャレットを2倍にしてエスケープする必要があるWindowsユーザーにとってはよりクリーンです。

git format-patch HEAD~1 --stdout > patchfile.patch

2
私のために働いた-ありがとう。WindowsとGitを使用している場合は、ニンジンを回避する必要があります(私は凶悪犯を知っています): "git format-patch HEAD ^^ --stdout> patchfile.patch"
Steve Midgley

3
そのキャレットをエスケープする必要があるというWindowsの問題(これにより、別の有効なgitコマンドのように見える)を回避するには、の代替を使用できますgit format-patch HEAD~1。Windowsでは混乱が少ないと思います。
Michael Burr

30

別の方法として、その特定のコミットのコミットIDがある場合、使用できます。

git format-patch -1 {commit-id}

9

-pログをgit するオプションが必要です:

git log -1 -p --pretty='%b'

ファイルの先頭のfrom / date / subject行のメールが気にならない場合は、これを使用してください。
Ryan H.

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