セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣習
- 日常のGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
プラミングコマンド
- 2.48.1 → 2.49.0 変更なし
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.2 変更なし
- 2.46.0 変更なし
- 2.45.1 → 2.45.3 変更なし
-
2.45.0
2024-04-29
- 2.43.2 → 2.44.3 変更なし
-
2.43.1
2024-02-09
- 2.40.1 → 2.43.0 変更なし
-
2.40.0
2023-03-12
- 2.38.1 → 2.39.5 変更なし
-
2.38.0
2022-10-02
- 2.37.4 → 2.37.7 変更なし
-
2.37.3
2022-08-30
- 2.34.1 → 2.37.2 変更なし
-
2.34.0
2021-11-15
- 2.25.1 → 2.33.8 変更なし
-
2.25.0
2020-01-13
- 2.22.1 → 2.24.4 変更なし
- 2.22.0 変更なし
- 2.21.1 → 2.21.4 変更なし
-
2.21.0
2019-02-24
- 2.18.1 → 2.20.5 変更なし
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 変更なし
-
2.16.6
2019-12-06
- 2.15.4 変更なし
-
2.14.6
2019-12-06
- 2.11.4 → 2.13.7 変更なし
-
2.10.5
2017-09-22
- 2.8.6 → 2.9.5 変更なし
-
2.7.6
2017-07-30
- 2.5.6 → 2.6.7 変更なし
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
2014-12-17
書式
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/file1
とdir/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.ignoreErrors
をtrue
に設定すると、これがデフォルトの動作になります。 -
--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
選択肢が一意である限り、上記で s
、sta
、または 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.png
がHEAD
と差分があること(ただしバイナリであるため行数は表示できないこと)、およびインデックス化されたコピーとワーキングツリーバージョンとの間に差分がないこと(ワーキングツリーバージョンも異なる場合は、*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.singleKey
をtrue
に設定することで、ここでEnterキーを押すのを省略できます。 - diff
-
これは、コミットされる内容(つまり、
HEAD
とインデックスの間)を確認できます。
パッチの編集
git add -e
を呼び出すか、対話型ハンクセレクターから e
を選択すると、エディタでパッチが開きます。エディタが終了した後、その結果がインデックスに適用されます。パッチに自由に任意の変更を加えることができますが、一部の変更は混乱を招く結果となったり、適用できないパッチになったりする可能性があることに注意してください。操作全体を中止したい場合(つまり、インデックスに何も新しくステージングしない場合)は、パッチのすべての行を削除するだけです。以下のリストは、パッチによく見られるものと、それらに対して意味のある編集操作について説明しています。
より複雑な操作も実行できます。ただし、パッチはインデックスにのみ適用され、ワーキングツリーには適用されないため、ワーキングツリーではインデックス内の変更が「元に戻された」ように見えることに注意してください。たとえば、HEAD
またはワーキングツリーのいずれにも存在しない新しい行をインデックスに導入すると、その新しい行はコミットのためにステージングされますが、ワーキングツリーではその行が元に戻されたように見えます。
これらの構造の使用は避けるか、細心の注意を払って行ってください。
- 未変更の内容の削除
-
インデックスとワーキングツリーの間で差がない内容は、コンテキスト行として表示され、「 」(スペース)で始まります。コンテキスト行を削除のためにステージングするには、スペースを「-」に変換します。結果として生成されるワーキングツリーファイルには、その内容が再追加されたように見えます。
- 既存の内容の変更
-
コンテキスト行を削除のためにステージング(「 」を「-」に変換)し、新しい内容の「+」行を追加することでも、コンテキスト行を変更できます。同様に、既存の追加や変更の「+」行も変更できます。すべての場合において、新しい変更はワーキングツリーで元に戻されたように見えます。
- 新しい内容
-
パッチに存在しない新しい内容を追加することもできます。単に新しい行を追加し、それぞれを「+」で開始します。追加された内容はワーキングツリーで元に戻されたように見えます。
パッチを適用できなくするため、完全に避けるべき操作もいくつかあります。
-
コンテキスト行(" ")または削除行("-")の追加
-
コンテキスト行または削除行の削除
-
コンテキスト行または削除行の内容の変更
設定
このセクションのこの行より下は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見つかるものと同じです
GIT
git[1] スイートの一部