回答:
で作成されたパッチにgit format-patch
は、コミットに関するメタ情報(コミッタ、日付、コミットメッセージなど)も含まれ、バイナリデータの差分が含まれます。すべてがメールとしてフォーマットされるため、簡単に送信できます。それを受け取った人は対応するコミットを再作成できgit am
、すべてのメタデータはそのまま残ります。git apply
シンプルなdiffのスーパーセットであるため、これも適用できます。
で作成されたパッチはgit diff
、コンテキストを持つ単純な差分になります(と考えてくださいdiff -u
)。これも適用できますgit apply
が、メタデータは(存在しないため)再作成されません。
要約すると、2つのツリー間の差分を取得するのに役立ちgit format-patch
ながら、コミットを送信するのにgit diff
役立ちます。
git-diffが変更を示している間、マニュアルからgit-format-patchはメール送信に適したパッチを準備します。
それらは2つの異なるものであり、異なる目的があります。たまたま、パッチ形式を出力するだけです。ただしgit-format-patch
、コミットに関するデータ(日付、作成者、コミットメッセージ)を追加し、Unixメールメッセージとして送信するのに適した形式にバンドルします(ただし、これらは単なるファイルなので、他のメソッドに送信したり、 git-am)。
またgit-format-patch
、指定した範囲のコミットごとにパッチファイルを生成します。これらの変更は、リポジトリへのコミットとしてで追加されますgit-am
。
git-diff
要求した2つの状態の差分を表示するだけで、パッチファイルの作成に使用できます。ただし、これは通常のパッチファイルであり、パッチを適用すると作業ディレクトリの状態が変更されるだけです。
そうです、その方法でインデックスのパッチを作成できます。
git diff
コマンドを使用してパッチファイルを生成できますが、コマンドによって生成されたパッチと比較するとgit format-patch
、主な違いは次のとおりです。
変更されたすべてのファイル(インデックスまたは作業ディレクトリ内)のパッチファイルを生成するには:
git diff HEAD --binary > my.patch
# git diff + git diff --cached/staged == git diff HEAD
生成されたパッチファイルを適用するには:
# restore the changed files firstly
git restore --staged .
git restore .
# apply the patch to redo the changes
git apply my.patch
# or
patch -p1 < my.patch