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.txt
colordiff
は OS のパッケージマネージャでインストールできることが多いようです。
Mac の Homebrew の場合は次のコマンドで入ります。
$ brew install colordiff
git 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 つめのスラッシュまでを無視することになります。
以上です。