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


134

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


11
amApply Mail...の略語と考えることができます
フィリップオークリー

回答:


144

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

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

git amgit apply舞台裏使用しますが、前に(Maildirまたはを読んだり、mbox電子メールメッセージを解析したり)、後(コミットを作成したり)の作業が増えます。


6
注:出力git applyも受け入れるようgit format-patchです。
Ciro Santilli郝海东冠状病六四事件法轮功

7
git applyからの出力でgit format-patchも機能しますが、変更はステージングされず、コミットする必要があります(したがって、変更が適用されるインデックスに別のコミットポイントを作成します)。ではgit am、あなたはそれが適用されたインデックスに(著者、などと一緒に)コミット情報を運ぶことになります。git apply次に、リポジトリにパッチを適用するため(不良)、git am正当な機能の変更を取り、それをリポジトリに含めることができます(推奨されるアプローチ)。
Prasoon Joshi

18

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


9

ではgit am、あなたが使用している場合ので、あなたのパッチを適用git statusしますが、任意のローカル変更は表示されません。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.