Git で表示される差分を、patch ファイルにすることができる。
これを使うと、patch ファイルとして後で適用したり、他 PC で差分だけ適用したりできるので便利。
patch ファイルの作り方
以下、コミット前の修正をパッチファイル化したい時の例。
$ git diff > diff.patch
そうすると、以下の様なファイルが作成される。
$ cat diff.patch (git)-[master] -
diff --git a/test.txt b/test.txt
index d00491f..1191247 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
1
+2
ちなみに、以下のような差分指定もできる。
$ git diff HEAD~1 > head_diff.patch
--no-prefix
オプションについて
git diff
の --no-prefix
は不要である点、コメントで教えて頂きました。
ご指摘ありがとうございます。
http://qiita.com/sea_mountain/items/7d9c812e68a26bd1a292#comment-c0515c9335128da21656
patch ファイルの使い方
上記で作成した patch ファイルは以下のコマンドで適用できる。
$ patch -p1 < diff.patch
上記の例は patch を作成した時の階層と同じ階層で適用する場合。
-p
オプションとは
-p
オプションは、パッチを適用するディレクトリのことを示している。
git diff
コマンドで作成した patch ファイルだと、diff で表示される、変更ファイルのパスが、リポジトリ直下になる。
そのため、同じ階層にいる状態で patch を適用するときは -p0
オプションを使えば良い。
-p
オプション使用例
man patch
に書かれている -p
の使用例が大変わかり易いので、以下翻訳しつつ引用する。
-p数字 または --strip=数字 オプションで使用する
別ディレクトリに存在するファイルにパッチを当てたいときに有効である。
以下の様なファイルの場合
/u/howard/src/blurfl/blurfl.c
-p0 パス指定を変更しない
/u/howard/src/blurfl/blurfl.c
-p1 スラッシュが1つなくなった状態になる
u/howard/src/blurfl/blurfl.c
-p4 パス名 + スラッシュのセットが4つ分無くなる。("/" + "u/" + "howard/" + "src/" この4セット)
blurfl/blurfl.c
-p オプションを指定しない場合の挙動は、blurfl.c となる。
参考サイト
普通のpatchコマンドで取り込めるdiffファイルをgitで作成する
patch -p0 コマンドで適用できるパッチを作成する
IBM Knowledge Center コマンド・リファレンス 第 4 巻 patch コマンド