SYNOPSIS

git add [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--all | [--update | -u]] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--] [<filepattern>…]

DESCRIPTION

このコマンドは新しいファイルや修正したファイルのコンテンツを索引に追加します。 結果としてそれらのコンテンツを stage する (次回のコミットに含めるようgitに指示する)ことになります。

"索引" はワーキングツリーのコンテンツのスナップショットをひとつ保持しています。 そしてそのスナップショットは次回のコミットのコンテンツとして扱われます。 従ってワーキングディレクトリに何か変更を加えた後は、 commit コマンドを実行する前に add コマンドを使って、 新しいファイルや修正したファイルを索引に追加しなければなりません。

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

git status コマンドで、次回のコミットのために stage された変更点を持ったファイルの一覧を取得できます。

git add コマンドはデフォルトで無視ファイル(訳注: .gitignore に登録されたファイル)を追加しません。 無視ファイルがコマンドラインで明示的に指定された場合、git add は無視ファイルの一覧を表示して失敗します。 ディレクトリ再帰やGitによるファイル名のグロビング (シェルに解釈されないよう引用符で囲みます) の結果として無視ファイルが含まれていた場合、黙って無視します。 add コマンドは -f(force)オプションと一緒に使えば 無視ファイルを追加することができます。

コミットに追加する別の方法は git-commit(1) を見てください。

OPTIONS

<filepattern>…

コンテンツを追加するファイルを指定します。 ファイルグロブ(例 *.c)でマッチするファイルを すべて追加することができます。また、 ディレクトリ名を指定してそのディレクトリ配下を 再帰的に全て追加することが可能です。 (例: dir/file1dir/file2 を追加するために dir を指定する)

-n
--dry-run

ファイルが存在すればそれを表示するだけで、 実際にはファイルを追加しません。

-v
--verbose

冗長表示になります。

-f
--force

無視ファイルであっても追加します。

-i
--interactive

修正したワーキングツリーのコンテンツを対話的に索引に追加します。 操作をワーキングツリーの一部に限定するためにファイルパスを 指定することもできます。 詳細は'Interactive mode'を見てください。

-p
--patch

インタラクティブモードに似ていますが、 最初のコマンド入力をバイパスして、 指定されたファイルパターンに対して patch サブコマンドを呼び出します。

-e, --edit

エディタを開いて索引に対する差分を編集できます。 エディタを終了後は hunk ヘッダ(訳注: 差分に含まれる位置情報)を調整し、 パッチとして索引に適用します。

NOTE: 明らかなことですが、"-"(マイナス)または" "(空白文字) から始まる行を編集した場合(訳注: ワーキングツリーではなく索引のほうに含まれる部分を編集した場合)、 パッチは適用されません。

-u
--update

gitがすでに知っているファイルのみ索引を更新します。 これはつまり、修正したコンテンツを stage し、 削除されたファイルは削除の目印をつけることになります。 これはコマンドラインで指定されたファイルパスに限定されることを除けば、 "git commit -a" がコミットの準備段階で実行する処理内容と似ています。 パスを指定しなかった場合、 カレントディレクトリ配下およびそのサブディレクトリ配下の、 全てのgit管理下のファイルが更新されます。

-A
--all

gitがすでに知っているファイルの索引を更新し(--update と同じ)、 gitがまだ追跡していないファイルもすべて追加します。 ただし、.gitignore によって無視されているファイルは除きます。

-N
--intent-to-add

指定したパスのファイルが、後で add されるということだけを記録します。 索引には空のファイルが登録されます。 これはstageされていないファイルのうち、git diff で表示させたり、 git commit -a でコミットしたいファイルに対して使用すると便利です。

--refresh

ファイルは追加せず、 索引にあるファイルのstat()情報だけをリフレッシュします。

--ignore-errors

エラーによりファイルを索引に追加することに失敗しても、 操作を中断せず、他のファイルの追加を続けます。 そのときコマンドは0以外のステータスで終了します。

--

このオプションはコマンドラインオプションと、 コマンドラインで指定するファイルのリストとを分けるために使えます。 (ファイル名がコマンドラインオプションに間違えられそうなときに役立ちます)

Configuration

設定変数 core.excludesfile に git-add から除外するファイルの名のパターンを指定できます。 これは $GIT_DIR/info/exclude に似ています。 除外ファイルのパターンは、この info/exclude に加えて使われます。 gitrepository-layout(5) 参照。

EXAMPLES

Interactive mode

インタラクティブモードに入ると、 status サブコマンドの出力を表示します。 その後、対話コマンドループに進みます。

コマンドループでは使用可能なサブコマンドのリストを表示し、 "What now> "というプロンプトを表示します。 プロンプトがひとつの > で終わっているときは、 与えられたサブコマンドからひとつだけ選択できます。 例えば以下のように:

    *** 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個のサブコマンド(および help と quit) を持っています。

status

このコマンドは HEAD と索引の間の変更 (つまり"git commit"でコミットされる内容)および、 索引とワーキングツリーのファイルとの間の変更 ("git commit"の前に"git-add"でstage可能な内容)を、 各パスごとに表示します。出力例はこちらのとおり:

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

上記は foo.png が HEAD との間に違いがあることを示しており (ただし、バイナリファイルの行数は表示されません)、 索引に追加されているコピーとワーキングツリーの版との間には、 違いがないことを示しています (もしワーキングツリーと異なっていれば、 nothing とあるところに binary と表示されます)。 もう一方のファイル (git-add--interactive.perl) は、 コミットすれば403行追加され、35行削除される内容を索引に持っており、 ワーキングツリーのファイルにはさらに変更が加えられています (1行追加、1行削除)。

update

このコマンドはstatusの情報を表示したあと、 "Update>>"プロンプトを表示します。 プロンプトがふたつの >> で終わっている場合、 スペースまたはカンマで区切って、ひとつ以上の選択肢を選べます。 また、範囲指定も可能です。つまり、リストから 2,3,4,5,7,9 を選ぶために "2-5 7,9" を指定できます。 範囲指定の後ろの数字が省略されると、残りのパスすべてが選択されます。 つまり、7,8,9をリストから選ぶために "7-" を指定できます。 全部を選ぶために* を指定可能です。

選択したパスは以下のように * でハイライトされます:

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

選択を解除するには、先に - をつけて入力します:

Update>> -2

選択が終わった後は、何も入力せずに Enter だけを入力すれば、 選択したパスのワーキングツリーのファイルの内容が、 インデックスに追加されます。

revert

これは update とよく似たインターフェースを持っています。 選択したパスの stage された情報を HEAD の内容に戻します。 新しく追加したパスは git が追跡していない状態に戻されます。

add untracked

これは updaterevert によく似ていて、 git が追跡していないパスを索引に追加できます。

patch

これは status 出力からパスをひとつ選択します。選択した後、 索引とワーキングツリーのファイルとの diff を表示し、 各 hunk ごとにその変更点を stage するかどうか聞いてきます。 可能な回答は:

y - 処理中の hunk を索引に追加します。
n - 処理中の hunk を索引に追加しません。
q - 終了します。処理中の hunk およびそれ以降の hunk は索引に追加しません。
a - 処理中の hunk およびそれ以降のファイル中の hunk を索引に追加します。
d - 処理中の hunk およびそれ以降のファイル中の hunk を索引に追加しません。
g - 処理対象となる(別の) hunk を選択します。
/ - 入力した正規表現にマッチする hunk を検索します。
j - 処理中の hunk を保留にし、次の保留されている hunk を表示します。
J - 処理中の hunk を保留にし、次の hunk を表示します。
k - 処理中の hunk を保留にし、ひとつ前の保留されている hunk を表示します。
K - 処理中の hunk を保留にし、ひとつ前の hunk を表示します。
s - 現在の hunk を小さい hunk に分割します。
e - 現在の hunk を手動で編集します。
? - ヘルプを表示します。

すべての hunk をどう処理するか決定した後、索引に追加するよう選ばれた hunk があればその hunk で索引を更新します。

diff

コミットされる内容(HEAD と索引の diff)を表示します

SEE ALSO

git-status(1) git-rm(1) git-reset(1) git-mv(1) git-commit(1) git-update-index(1)

Author

このコマンドは Linus Torvalds <torvalds@osdl.org> が書きました。

Documentation

このドキュメントは Junio C Hamano and the git-list <git@vger.kernel.org> が書きました。

GIT

このコマンドは git(1) スイートの一部です。