English ▾ トピック ▾ 最新バージョン ▾ git-add は 2.48.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>…​]

説明

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

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

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

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

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

コミットにコンテンツを追加する別の方法については、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 文字はそのまま残されるため、CRLFLF にクリーンアップされますが、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つだけを選択してEnterキーを押すことができます。例えば、

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

上記の選択肢がユニークであれば、ssta、または 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.pngHEAD との差分があること (ただしバイナリなので行数は表示できない)、そしてインデックスされたコピーとワークツリーのバージョンとの間に差分がないこと (もしワークツリーのバージョンも異なっていれば、nothing の代わりに binary と表示されていたでしょう) を示しています。もう1つのファイル 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バージョンに戻されます。新しいパスを元に戻すと、それらは追跡されなくなります。

add untracked

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

patch

これは、status のような選択の中から1つのパスを選択できます。パスを選択した後、インデックスとワークツリーファイル間の差分を表示し、各ハンクの変更をステージングするかどうかを尋ねます。以下のオプションのいずれかを選択し、Enterキーを押すことができます。

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.singleKeytrue に設定することで、ここでエンターキーを押す手間を省くことができます。

diff

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

パッチの編集

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

追加されたコンテンツ

追加された内容は「+」で始まる行で表されます。追加行を削除することで、ステージングを防ぐことができます。

削除されたコンテンツ

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

変更されたコンテンツ

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

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

これらの構成体の使用は避けるか、細心の注意を払って行ってください。

未変更コンテンツの削除

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

既存コンテンツの変更

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

新規コンテンツ

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

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

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

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

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

設定

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

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

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

GIT

git[1]スイートの一部

scroll-to-top