日本語 ▾ トピック ▾ 最新版 ▾ git-am は2.50.0で最終更新されました

名前

git-am - メールボックスから一連のパッチを適用する

概要

git am [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] [--no-verify]
	 [--[no-]3way] [--interactive] [--committer-date-is-author-date]
	 [--ignore-date] [--ignore-space-change | --ignore-whitespace]
	 [--whitespace=<action>] [-C<n>] [-p<n>] [--directory=<dir>]
	 [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
	 [--[no-]scissors] [-S[<keyid>]] [--patch-format=<format>]
	 [--quoted-cr=<action>]
	 [--empty=(stop|drop|keep)]
	 [(<mbox> | <Maildir>)…​]
git am (--continue | --skip | --abort | --quit | --retry | --show-current-patch[=(diff|raw)] | --allow-empty)

説明

メールボックス内のメールメッセージをコミットログメッセージ、作成者情報、パッチに分割し、それらを現在のブランチに適用します。これは、マージのない直線的な履歴を持つブランチで実行されるgit-format-patch[1]の逆操作と考えることができます。

オプション

(<mbox>|<Maildir>)...​

パッチを読み込むメールボックスファイルのリスト。この引数を指定しない場合、コマンドは標準入力から読み込みます。ディレクトリを指定した場合、それらはMaildirとして扱われます。

-s
--signoff

コミットメッセージに、あなたのコミッターIDを使用してSigned-off-byトレーラーを追加します。git-commit[1]のsignoffオプションを参照してください。

-k
--keep

git mailinfo-kフラグを渡します(git-mailinfo[1]を参照)。

--keep-non-patch

git mailinfo-bフラグを渡します(git-mailinfo[1]を参照)。

--[no-]keep-cr

--keep-crを使用すると、git mailsplitgit-mailsplit[1]を参照)を同じオプションで呼び出し、行末のCRを削除しないようにします。am.keepcr設定変数でデフォルトの動作を指定できます。--no-keep-cram.keepcrを上書きするのに便利です。

-c
--scissors

本文中のハサミ線より前のすべてを削除します(git-mailinfo[1]を参照)。mailinfo.scissors設定変数を使用してデフォルトで有効にすることができます。

--no-scissors

ハサミ線を無視します(git-mailinfo[1]を参照)。

--quoted-cr=<action>

このフラグはgit mailinfoに渡されます(git-mailinfo[1]を参照)。

--empty=(drop|keep|stop)

パッチのないメールメッセージの処理方法

drop

メールメッセージはスキップされます。

keep

空のコミットが作成され、メールメッセージの内容がログとして使用されます。

stop

コマンドは失敗し、現在のamセッションの途中で停止します。これがデフォルトの動作です。

-m
--message-id

git mailinfo-mフラグを渡して(git-mailinfo[1]を参照)、Message-IDヘッダーをコミットメッセージに追加します。am.messageid設定変数でデフォルトの動作を指定できます。

--no-message-id

Message-IDヘッダーをコミットメッセージに追加しません。no-message-idam.messageidを上書きするのに便利です。

-q
--quiet

静かに実行します。エラーメッセージのみを出力します。

-u
--utf8

git mailinfo-uフラグを渡します(git-mailinfo[1]を参照)。メールから取得された提案されたコミットログメッセージはUTF-8エンコーディングに再エンコードされます(UTF-8でない場合、i18n.commitEncoding設定変数でプロジェクトの推奨エンコーディングを指定できます)。

これは以前のバージョンのgitではオプションでしたが、現在はデフォルトです。--no-utf8を使用してこれを上書きできます。

--no-utf8

git mailinfo-nフラグを渡します(git-mailinfo[1]を参照)。

-3
--3way
--no-3way

パッチがクリーンに適用されない場合、パッチが適用対象のブロブのIDを記録しており、それらのブロブがローカルで利用可能な場合は、3-wayマージにフォールバックします。--no-3wayはam.threeWay設定変数を上書きするために使用できます。詳細については、git-config[1]のam.threeWayを参照してください。

--rerere-autoupdate
--no-rerere-autoupdate

rerereメカニズムが現在の競合に対して記録された解決策を再利用して作業ツリーのファイルを更新した後、その解決策の結果でインデックスも更新することを許可します。--no-rerere-autoupdateは、別のgit addで結果をインデックスにコミットする前に、rerereが行ったことを再確認し、潜在的な誤マージをキャッチする良い方法です。

--ignore-space-change
--ignore-whitespace
--whitespace=<action>
-C<n>
-p<n>
--directory=<dir>
--exclude=<path>
--include=<path>
--reject

これらのフラグは、パッチを適用するgit applyプログラム(git-apply[1]を参照)に渡されます。

--whitespaceオプションの有効な<action>は、nowarnwarnfixerror、およびerror-allです。

--patch-format

デフォルトでは、コマンドはパッチ形式を自動的に検出します。このオプションを使用すると、ユーザーは自動検出をバイパスし、パッチが解釈されるべきパッチ形式を指定できます。有効な形式は、mbox、mboxrd、stgit、stgit-series、およびhgです。

-i
--interactive

対話的に実行します。

-n
--no-verify

デフォルトでは、pre-applypatchフックとapplypatch-msgフックが実行されます。--no-verifyまたは-nのいずれかが指定された場合、これらはバイパスされます。githooks[5]も参照してください。

--committer-date-is-author-date

デフォルトでは、コマンドはメールメッセージからの日付をコミットの作者日付として記録し、コミット作成時刻をコミッター日付として使用します。これにより、ユーザーは作者日付と同じ値を使用することでコミッター日付について偽ることができます。

--ignore-date

デフォルトでは、コマンドはメールメッセージからの日付をコミットの作者日付として記録し、コミット作成時刻をコミッター日付として使用します。これにより、ユーザーはコミッター日付と同じ値を使用することで作者日付について偽ることができます。

--skip

現在のパッチをスキップします。これは中止されたパッチを再開する場合にのみ意味があります。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

コミットをGPG署名します。keyid引数はオプションで、デフォルトはコミッターIDです。指定された場合、スペースなしでオプションに付加する必要があります。--no-gpg-signは、commit.gpgSign設定変数と以前の--gpg-signの両方を取り消すのに便利です。

--continue
-r
--resolved

パッチの失敗(例:競合するパッチを適用しようとした場合)の後、ユーザーが手作業で適用し、インデックスファイルが適用結果を保存している場合。メールメッセージから抽出された作者情報とコミットログ、および現在のインデックスファイルを使用してコミットを作成し、続行します。

--resolvemsg=<msg>

パッチの失敗が発生した場合、終了する前に<msg>が画面に表示されます。これは、失敗を処理するために--continueまたは--skipを使用するように通知する標準メッセージを上書きします。これは、git rebasegit amの間での内部使用のみを目的としています。

--abort

元のブランチを復元し、パッチ適用操作を中止します。am操作に関与したファイルの内容を、am前の状態に戻します。

--quit

パッチ適用操作を中止しますが、HEADとインデックスはそのままにします。

--retry

最後の競合するパッチをもう一度適用しようとします。これは一般的に、再試行に余分なオプション(例:--3way)を渡す場合にのみ役立ちます。そうでない場合、同じ失敗が再び発生するだけです。

--show-current-patch[=(diff|raw)]

git amが競合のために停止したメッセージを表示します。rawが指定された場合、メールメッセージの生のコンテンツを表示します。diffが指定された場合、差分部分のみを表示します。デフォルトはrawです。

--allow-empty

パッチのない入力メールメッセージに対するパッチ失敗後、メールメッセージの内容をログメッセージとして持つ空のコミットを作成します。

考察

コミットの作者名はメッセージの「From: 」行から、コミットの作者日付はメッセージの「Date: 」行から取得されます。「Subject: 」行は、一般的なプレフィックス「[PATCH <anything>]」を削除した後、コミットのタイトルとして使用されます。「Subject: 」行は、コミットの内容を簡潔に1行のテキストで記述することになっています。

本文の先頭にある「From: 」、「Date: 」、「Subject: 」行は、ヘッダーから取得されたそれぞれのコミット作者名とタイトル値を上書きします。

コミットメッセージは、「Subject: 」から取得されたタイトル、空白行、パッチが始まるまでのメッセージ本文で構成されます。各行の末尾の余分な空白は自動的に削除されます。

パッチはインラインで、メッセージの直後に続くことが期待されます。以下の形式の行はすべて、

  • ハイフン3つと行末、または

  • 「diff -」で始まる行、または

  • 「Index: 」で始まる行

はパッチの始まりとみなされ、コミットログメッセージはそのような行の最初の出現の前に終了します。

git amを最初に呼び出すとき、処理するメールボックスの名前を指定します。最初の適用できないパッチが見つかると、途中で中断されます。これは2つの方法で回復できます。

  1. --skipオプションを付けてコマンドを再実行することで、現在のパッチをスキップします。

  2. 作業ディレクトリで競合を手動で解決し、パッチが生成すべき状態になるようにインデックスファイルを更新します。次に、--continueオプションを付けてコマンドを実行します。

コマンドは、現在の操作が完了するまで新しいメールボックスの処理を拒否するため、最初からやり直すことにした場合、メールボックス名を付けてコマンドを実行する前にgit am --abortを実行します。

パッチが適用される前に、ORIG_HEADは現在のブランチの先端に設定されます。これは、間違ったブランチでgit amを実行したり、メールボックスを変更することで簡単に修正できるコミットのエラー(例:「From:」行のエラー)など、複数のコミットに問題がある場合に役立ちます。

フック

このコマンドは、applypatch-msgpre-applypatch、およびpost-applypatchフックを実行できます。詳細についてはgithooks[5]を参照してください。

設定

このセクションのこの行より下のすべての内容は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見られるものと同じです。

am.keepcr

trueの場合、git-amはmbox形式のパッチに対してgit-mailsplitをパラメータ--keep-crで呼び出します。この場合、git-mailsplitは\r\nで終わる行から\rを削除しません。コマンドラインから--no-keep-crを指定することで上書きできます。git-am[1]git-mailsplit[1]を参照してください。

am.threeWay

デフォルトでは、パッチがクリーンに適用されない場合、git amは失敗します。trueに設定すると、この設定は、パッチが適用対象のブロブのIDを記録しており、それらのブロブがローカルで利用可能な場合、git amに3-wayマージにフォールバックするように指示します(コマンドラインから--3wayオプションを指定するのと同等です)。デフォルトはfalseです。git-am[1]を参照してください。

関連項目

GIT

git[1]スイートの一部

scroll-to-top