Git
English ▾ トピック ▾ 最新バージョン ▾ git-add は2.46.0で最終更新されました

名前

git-add - ファイルの内容をインデックスに追加する

書式

git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
	  [--edit | -e] [--[no-]all | -A | --[no-]ignore-removal | [--update | -u]] [--sparse]
	  [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] [--renormalize]
	  [--chmod=(+|-)x] [--pathspec-from-file=<file> [--pathspec-file-nul]]
	  [--] [<pathspec>…​]

説明

このコマンドは、作業ツリーにある現在のコンテンツを使用してインデックスを更新し、次のコミットのためにステージングされたコンテンツを準備します。通常は、既存のパスの現在のコンテンツ全体を追加しますが、いくつかのオプションを使用すると、作業ツリーファイルに加えられた変更の一部のみを適用したコンテンツを追加したり、作業ツリーに存在しないパスを削除したりすることもできます。

「インデックス」は作業ツリーのコンテンツのスナップショットを保持しており、次のコミットのコンテンツとして取得されるのはこのスナップショットです。したがって、作業ツリーに変更を加えた後、コミットコマンドを実行する前に、addコマンドを使用して、新規または変更されたファイルをインデックスに追加する必要があります。

このコマンドは、コミット前に複数回実行できます。 addコマンドが実行された時点での指定されたファイルのコンテンツのみが追加されます。後続の変更を次のコミットに含める場合は、git addを再度実行して新しいコンテンツをインデックスに追加する必要があります。

git statusコマンドを使用すると、次のコミットのためにステージングされた変更があるファイルの概要を取得できます。

git addコマンドは、デフォルトでは無視されたファイルを追加しません。コマンドラインで無視されたファイルが明示的に指定された場合、git addは無視されたファイルのリストで失敗します。 Gitによって実行されるディレクトリ再帰またはファイル名グロビング(シェルではなく引用符で囲む必要があります)によって到達した無視されたファイルは、サイレントに無視されます。 git addコマンドは、-f(強制)オプションを使用して無視されたファイルを追加するために使用できます。

コミットにコンテンツを追加する別の方法については、git-commit[1]を参照してください。

オプション

<pathspec>…​

コンテンツを追加するファイル。ファイルグロブ(例:*.c)を指定して、一致するすべてのファイルを追加できます。また、先頭のディレクトリ名(例:dirを追加してdir/file1dir/file2を追加する)を指定して、インデックスをディレクトリ全体の現在の状態と一致するように更新できます(例:dirを指定すると、ファイルdir/file1が作業ツリーで変更されただけでなく、ファイルdir/file2が作業ツリーに追加されただけでなく、ファイルdir/file3が作業ツリーから削除されたことも記録されます)。 Gitの古いバージョンでは、削除されたファイルを無視していました。変更されたファイルまたは新しいファイルを追加するが、削除されたファイルは無視する場合は、--no-allオプションを使用してください。

<pathspec>構文の詳細については、gitglossary[7]pathspecエントリを参照してください。

-n
--dry-run

実際にファイルを追加しないで、ファイルが存在するかどうか、および/または無視されるかどうかのみを表示します。

-v
--verbose

詳細な出力を行います。

-f
--force

通常は無視されるファイルの追加を許可します。

--sparse

スパースチェックアウトコーン外のインデックスエントリの更新を許可します。通常、git addは、スパースチェックアウトコーン内に収まらないパスのインデックスエントリの更新を拒否します。これは、これらのファイルが警告なしに作業ツリーから削除される可能性があるためです。詳細については、git-sparse-checkout[1]を参照してください。

-i
--interactive

作業ツリーで変更されたコンテンツをインタラクティブにインデックスに追加します. オプションのパス引数を指定して、操作を作業ツリーのサブセットに制限することができます. 詳細は「インタラクティブモード」を参照してください.

-p
--patch

インデックスと作業ツリー間の差分をハンク単位でインタラクティブに選択し、インデックスに追加します。これにより、ユーザーは変更されたコンテンツをインデックスに追加する前に、差分を確認する機会が得られます。

これは事実上add --interactiveを実行しますが、最初のコマンドメニューをバイパスして、直接patchサブコマンドにジャンプします。詳細については、「インタラクティブモード」を参照してください.

-e
--edit

インデックスに対する差分をエディターで開き、ユーザーが編集できるようにします。エディターが閉じられた後、ハンクヘッダーを調整し、パッチをインデックスに適用します.

このオプションの目的は、適用するパッチの行を選択したり、ステージングする行のコンテンツを変更したりすることです。これは、インタラクティブなハンクセレクターを使用するよりも迅速で柔軟性があります。ただし、自分自身を混乱させて、インデックスに適用されないパッチを作成するのは簡単です。以下のパッチの編集を参照してください.

-u
--update

<pathspec>に一致するエントリが既に存在するインデックスのみを更新します。これは、作業ツリーと一致するようにインデックスエントリを削除および変更しますが、新しいファイルは追加しません.

-uオプションが使用されているときに<pathspec>が指定されていない場合、作業ツリー全体のすべての追跡ファイルが更新されます(Gitの古いバージョンでは、更新が現在のディレクトリとそのサブディレクトリに制限されていました)。

-A
--all
--no-ignore-removal

作業ツリーに<pathspec>に一致するファイルがある場合だけでなく、インデックスに既にエントリがある場合にもインデックスを更新します。これは、作業ツリーと一致するようにインデックスエントリを追加、変更、および削除します.

-Aオプションが使用されているときに<pathspec>が指定されていない場合、作業ツリー全体のすべてのファイルが更新されます(Gitの古いバージョンでは、更新が現在のディレクトリとそのサブディレクトリに制限されていました)。

--no-all
--ignore-removal

インデックスに不明な新しいファイルと作業ツリーで変更されたファイルを追加することにより、インデックスを更新しますが、作業ツリーから削除されたファイルは無視します。このオプションは、<pathspec>が使用されていない場合は操作を行いません.

このオプションは、主に「git add <pathspec>…​」が「git add --no-all <pathspec>…​」の同義語であった、つまり削除されたファイルを無視した、Gitの古いバージョンに慣れているユーザーを支援するためのものです.

-N
--intent-to-add

パスが後で追加されるという事実のみを記録します。コンテンツのないパスのエントリがインデックスに配置されます。これは、とりわけ、git diffでそのようなファイルのステージされていないコンテンツを表示し、git commit -aでコミットする場合に役立ちます.

--refresh

ファイルを追加しないで、インデックスのstat()情報のみを更新します.

--ignore-errors

インデックス作成エラーが原因で一部のファイルを追加できなかった場合、操作を中止せずに他のファイルの追加を続行します. コマンドは引き続きゼロ以外のステータスで終了します. 設定変数add.ignoreErrorsをtrueに設定すると、これがデフォルトの動作になります.

--ignore-missing

このオプションは、--dry-runと組み合わせてのみ使用できます. このオプションを使用することにより、ユーザーは、指定されたファイルが作業ツリーに既に存在するかどうかに関係なく、無視されるかどうかを確認できます.

--no-warn-embedded-repo

デフォルトでは、git addは、git submodule addを使用して.gitmodulesにエントリを作成せずに、埋め込みリポジトリをインデックスに追加するときに警告を発します. このオプションは警告を抑制します(たとえば、サブモジュールで手動で操作を実行する場合など).

--renormalize

追跡されているすべてのファイルに "clean" プロセスを新たに適用し、インデックスに強制的に再追加します。これは、core.autocrlf 設定または text 属性を変更した後、誤った CRLF/LF 行末で追加されたファイルを修正する場合に便利です。このオプションは -u を暗黙的に指定します。単独の CR 文字は変更されないため、CRLF は LF にクリーンされますが、CRCRLF シーケンスは CRLF に部分的にしかクリーンされません。

--chmod=(+|-)x

追加されたファイルの実行可能ビットを上書きします。実行可能ビットはインデックスでのみ変更され、ディスク上のファイルは変更されません。

--pathspec-from-file=<file>

パス指定は、コマンドライン引数ではなく、*`<file>`* で渡されます。 *`<file>`* が正確に `-` である場合、標準入力が使用されます。パス指定の要素は LF または CR/LF で区切られます。パス指定の要素は、設定変数 `core.quotePath` で説明されているように引用符で囲むことができます(git-config[1] を参照)。 `--pathspec-file-nul` およびグローバル `--literal-pathspecs` も参照してください。

--pathspec-file-nul

`--pathspec-from-file` と共にのみ意味があります。パス指定の要素は NUL 文字で区切られ、他のすべての文字は(改行や引用符を含め)文字通りに解釈されます。

--

このオプションは、コマンドラインオプションとファイルのリストを区切るために使用できます(ファイル名がコマンドラインオプションと間違えられる可能性がある場合に便利です)。

  • `Documentation` ディレクトリとそのサブディレクトリにあるすべての `*.txt` ファイルのコンテンツを追加します

    $ git add Documentation/\*.txt

    この例では、アスタリスク `*` はシェルから引用符で囲まれていることに注意してください。これにより、コマンドは `Documentation/` ディレクトリのサブディレクトリからのファイルを含めることができます。

  • すべての git-*.sh スクリプトのコンテンツの追加を検討します

    $ git add git-*.sh

    この例では、シェルがアスタリスクを展開できるようにしているため(つまり、ファイルを明示的にリストしているため)、`subdir/git-foo.sh` は考慮されません。

対話モード

コマンドが対話モードに入ると、*status* サブコマンドの出力が表示され、その後、対話型コマンドループに入ります。

コマンドループは、使用可能なサブコマンドのリストを表示し、「What now> 」というプロンプトを表示します。一般に、プロンプトが単一の *>* で終わる場合は、指定された選択肢のいずれか 1 つを選択して Return キーを押します。例:

    *** Commands ***
      1: status       2: update       3: revert       4: add untracked
      5: patch        6: diff         7: quit         8: help
    What now> 1

上記では、選択肢が一意である限り、`s`、`sta`、または `status` と言うこともできます。

メインコマンドループには、6 つのサブコマンド(ヘルプと終了に加えて)があります。

status

これは、HEAD とインデックス間の変更(つまり、`git commit` と言った場合にコミットされる内容)と、インデックスと作業ツリーファイル間の変更(つまり、`git add` を使用して `git commit` する前にさらにステージングできる内容)をパスごとに表示します。出力例は次のとおりです。

              staged     unstaged path
     1:       binary      nothing foo.png
     2:     +403/-35        +1/-1 add-interactive.c

foo.png は HEAD との違いがありますが(バイナリなので行数を表示できません)、インデックス付きコピーと作業ツリーバージョンとの間に違いはありません(作業ツリーバージョンも異なる場合、*nothing* の代わりに *binary* が表示されます)。もう一方のファイル add-interactive.c は、インデックスの内容をコミットすると 403 行が追加され、35 行が削除されますが、作業ツリーファイルにはさらに変更(1 つの追加と 1 つの削除)があります。

update

これはステータス情報を表示し、「Update>>」プロンプトを表示します。プロンプトが二重の *>>* で終わる場合は、空白またはコンマで連結された複数の選択を行うことができます。また、範囲を指定することもできます。たとえば、「2-5 7,9」と入力すると、リストから 2、3、4、5、7、9 が選択されます。範囲の 2 番目の数値を省略すると、残りのすべてのパッチが取得されます。たとえば、「7-」と入力すると、リストから 7、8、9 が選択されます。*`*`* と言うと、すべてを選択できます。

選択したものは、次のように *`*`* で強調表示されます。

           staged     unstaged path
  1:       binary      nothing foo.png
* 2:     +403/-35        +1/-1 add-interactive.c

選択を解除するには、次のように入力の前に `-` を付けます。

Update>> -2

選択後、空行で応答すると、選択したパスの作業ツリーファイルの内容がインデックスにステージングされます。

revert

これは *update* と非常によく似た UI を持ち、選択したパスのステージングされた情報は HEAD バージョンの情報に戻されます。新しいパスを revert すると、追跡されていない状態になります。

add untracked

これは *update* および *revert* と非常によく似た UI を持ち、追跡されていないパスをインデックスに追加できます。

patch

これにより、*status* のような選択から 1 つのパスを選択できます。パスを選択すると、インデックスと作業ツリーファイル間の差分が表示され、各ハンクの変更をステージングするかどうかを尋ねられます。次のオプションのいずれかを選択して Return キーを押します。

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
p - print the current hunk
? - print help

すべてのハンクの処理を決定した後、選択されたハンクがある場合、インデックスは選択されたハンクで更新されます。

設定変数 `interactive.singleKey` を `true` に設定することで、ここで Return キーを押す必要をなくすことができます。

diff

これにより、コミットされる内容(つまり、HEAD とインデックスの間)を確認できます。

パッチの編集

`git add -e` を呼び出すか、対話型ハンクセレクターから `e` を選択すると、エディターでパッチが開きます。エディターが終了した後、結果はインデックスに適用されます。パッチを自由にに変更できますが、一部の変更は混乱を招く結果になったり、適用できないパッチになったりする可能性があることに注意してください。操作を完全に中止する場合(つまり、インデックスに新しいものをステージングしない場合)、パッチのすべての行を削除するだけです。以下のリストでは、パッチでよく見られるものと、それらに対して意味のある編集操作について説明します。

追加されたコンテンツ

追加されたコンテンツは、「+」で始まる行で表されます。追加行のステージングを防ぐには、それらを削除します。

削除されたコンテンツ

削除されたコンテンツは、「-」で始まる行で表されます。削除のステージングを防ぐには、「-」を「 」(スペース)に変換します。

変更されたコンテンツ

変更されたコンテンツは、「-」行(古いコンテンツの削除)とそれに続く「+」行(置換コンテンツの追加)で表されます。「-」行を「 」に変換し、「+」行を削除することで、変更のステージングを防ぐことができます。ペアの半分だけを変更すると、インデックスに混乱を招く変更が導入される可能性があることに注意してください。

実行できる、より複雑な操作もあります。ただし、パッチは作業ツリーではなくインデックスにのみ適用されるため、作業ツリーではインデックスの変更が「元に戻された」ように見えることに注意してください。たとえば、HEAD と作業ツリーのどちらにも存在しない新しい行をインデックスに導入すると、新しい行がコミット用にステージングされますが、作業ツリーではその行が元に戻されたように見えます。

これらの構成を使用しないか、使用する場合は細心の注意を払ってください。

変更されていないコンテンツの削除

インデックスと作業ツリーの間で違いがないコンテンツは、コンテキスト行に「 」(スペース)で始まる形で表示される場合があります。コンテキスト行の削除をステージングするには、スペースを「-」に変換します。結果の作業ツリーファイルには、コンテンツが再追加されたように見えます。

既存のコンテンツの変更

コンテキスト行を削除用にステージング(「 」を「-」に変換)し、新しいコンテンツを含む「+」行を追加することで、コンテキスト行を変更することもできます。同様に、既存の追加または変更のために「+」行を変更することもできます。いずれの場合も、新しい変更は作業ツリーで元に戻されたように見えます。

新しいコンテンツ

パッチに存在しない新しいコンテンツを追加することもできます。「+」で始まる新しい行を追加するだけです。追加は作業ツリーで元に戻されたように見えます。

パッチを適用できなくなるため、完全に避けるべき操作もいくつかあります。

  • コンテキスト(「 」)または削除(「-」)行の追加

  • コンテキストまたは削除行の削除

  • コンテキストまたは削除行のコンテンツの変更

設定

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

add.ignoreErrors
add.ignore-errors (非推奨)

インデックスエラーが原因で一部のファイルを追加できない場合でも、*git add* にファイルの追加を続行するように指示します。git-add[1] の `--ignore-errors` オプションと同等です。`add.ignore-errors` は、設定変数の通常の命名規則に従っていないため、非推奨です。

GIT

git[1] スイートの一部

scroll-to-top