英語 ▾ トピック ▾ 最新バージョン ▾ 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>* が使用されない場合は何もしません(no-op)。

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

-N
--intent-to-add

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

--refresh

ファイルを追加せず、インデックス内のその stat() 情報のみを更新します。

--ignore-errors

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

--ignore-missing

このオプションは --dry-run とのみ一緒に使用できます。このオプションを使用すると、指定されたファイルが既にワーキングツリーに存在するかどうかにかかわらず、無視されるかどうかを確認できます。

--no-warn-embedded-repo

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

--renormalize

すべての追跡対象ファイルに「クリーン」プロセスを新たに適用し、強制的に再度インデックスに追加します。これは、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つだけを選択して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 commit の前に git add を使用してさらにステージングできる内容)をパスごとに表示します。出力例は次のようになります。

              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 に設定することで、ここでEnterキーを押すのを省略できます。

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