web-dev-qa-db-ja.com

git amとgit applyの違いは何ですか?

git amgit applyの両方を使用して、パッチを適用できます。違いがわかりません。違いがわかりました:git amは自動的にコミットしますが、git applyはファイルに触れるだけで、コミットは作成しません。それが唯一の違いですか?

117
Christoph

入力と出力の両方が異なります。

  • git apply はパッチ(例: git diff の出力)を取得し、それを作業ディレクトリ(または--indexまたは--cachedが使用されている場合はインデックス)に適用します。
  • git am は、メールメッセージとしてフォーマットされたコミットのメールボックス(たとえば git format-patch の出力)を取得し、現在のブランチに適用します。

git amは舞台裏でgit applyを使用 ですが、前(Maildirまたはmboxを読み取り、電子メールメッセージを解析)と後(コミットの作成)により多くの作業を行います。

116
georgebrock

git applyは単純な差分を適用するため(たとえばgit diffから)git amはmboxまたはMaildir形式の電子メールからパッチおよびパッチのシーケンスを適用するためで、git format-patchgit amは、コミットメッセージと作成者の詳細を電子メールメッセージから抽出しようとするため、コミットを行うことができます。

16
CB Bailey

git amを使用すると、パッチを適用するため、git statusを使用する場合、ローカルの変更は表示されません。

git applyを使用すると、自分でコードを記述しているかのようにソースファイルに変更を加えることができます。したがって、git statusおよびgit diffは、適用したパッチに加えられた変更を出力します。変更を修正/追加して、1つの新しいパッチとしてまとめて送信できます。

8
0x90