git diff コマンドとふつうの diff / patch コマンド
git のサブコマンドである git diff と通常の diff コマンド、 patch コマンドについての tips をいくつかまとめます。
diffコマンドでgit diff風の出力を出す方法git diffの出力結果を通常のpatchで適用する方法
diff コマンドで git diff 風の出力を出す方法
git diff の出力結果では、削除行の先頭に - が、追加行の先頭に + がつきます。
通常の diff コマンドの出力はこれとは形式が異なるのですが、 -u オプションを付けることで同等の結果を生成することができます。
$ git diff file_old.txt file_new.txt
/**
* @file
- * Provides a trivial function.
+ * Provides an awesome function.
+ *
+ * @see another_module
*/
$ diff -u file_old.txt file_new.txt
/**
* @file
- * Provides a trivial function.
+ * Provides an awesome function.
+ *
+ * @see another_module
*/-u オプションについて man コマンドで出てくるドキュメントでは次のように説明されています。
-u -U NUM --unified[=NUM]
Output NUM (default 3) lines of unified context.git diff のように色を付けたい場合は diff ではなく diff によく似た colordiff コマンドを使うとよいでしょう。
diff と同様の使い方ができます。
$ colordiff -u file_old.txt file_new.txtcolordiff は OS のパッケージマネージャでインストールできることが多いようです。
Mac の Homebrew の場合は次のコマンドで入ります。
$ brew install colordiffgit diff の出力結果を通常の patch で適用する方法
git diff で出力したパッチファイルは git apply で別のリポジトリに取り込むことができますが、リポジトリではないまったく別の場所で取り込みたい場合は patch コマンドが使用できます。
$ # リポジトリで git diff でパッチを作成
$ git diff > a_big_change.patch
$ # 同じファイルはあるが git で管理されていない場所でパッチをあてる
$ patch -p1 < a_big_change.patchここで注意すべきは git apply の場合は git apply パッチファイル.patch としますが、 patch コマンドの場合は patch < パッチファイル.patch とする必要がある点です。
-p オプションはパッチファイルのヘッダー内の対象ファイルのパスのうちスラッシュをいくつ無視するかという指定です。
-p1 とすると先頭から 1 つめのスラッシュまでを無視することになります。
以上です。