セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.48.1 → 2.50.1 変更なし
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.3 変更なし
- 2.46.0 変更なし
- 2.45.1 → 2.45.4 変更なし
-
2.45.0
2024-04-29
- 2.43.2 → 2.44.4 変更なし
-
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> が使用されない場合は何もしません。
このオプションは、
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つだけを選択して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
add
を使用してgit
commit
の前にさらにステージングできるもの)を表示します。サンプル出力は次のようになります。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
に設定することで、ここでエンターキーを押す手間を省くことができます。 - diff
-
これにより、コミットされる内容 (つまり、
HEAD
とインデックス間の差分) を確認できます。
パッチの編集
git
add
-e
を呼び出すか、対話式ハンクセレクタから e
を選択すると、エディタでパッチが開きます。エディタが終了すると、結果がインデックスに適用されます。パッチに任意の変更を加えることができますが、一部の変更は混乱を招く結果になったり、適用できないパッチになったりする可能性があることに注意してください。操作全体を完全に中止したい場合(つまり、インデックスに何も新しいものをステージングしない場合)は、パッチのすべての行を削除するだけです。以下のリストは、パッチで表示される可能性のある一般的な事項と、それらに対して有効な編集操作について説明しています。
- 追加されたコンテンツ
-
追加された内容は「+」で始まる行で表されます。追加行を削除することで、ステージングを防ぐことができます。
- 削除されたコンテンツ
-
削除されたコンテンツは「-」で始まる行で表されます。これらの削除のステージングを防ぐには、「-」を「 」(スペース)に変換します。
- 変更されたコンテンツ
-
変更されたコンテンツは、「-」行 (古いコンテンツの削除) の後に「+」行 (置換コンテンツの追加) が続く形で表されます。「-」行を「 」に変換し、「+」行を削除することで、変更のステージングを防ぐことができます。ペアの半分だけを変更すると、インデックスに混乱を招く変更が導入される可能性があることに注意してください。
さらに複雑な操作も実行できます。ただし、パッチはワークツリーではなくインデックスにのみ適用されるため、ワークツリーがインデックスの変更を「元に戻す」ように見えることに注意してください。たとえば、HEAD
とワークツリーのどちらにも存在しない新しい行をインデックスに導入すると、その新しい行がコミットのためにステージングされますが、その行はワークツリーで元に戻されたように見えます。
これらの構成体の使用は避けるか、細心の注意を払って行ってください。
- 未変更コンテンツの削除
-
インデックスとワークツリーの間で差がないコンテンツは、コンテキスト行として、「 」(スペース)で始まる行で表示される場合があります。コンテキスト行を削除のためにステージングするには、スペースを「-」に変換します。結果として生成されるワークツリーファイルは、コンテンツを再追加するように見えます。
- 既存コンテンツの変更
-
コンテキスト行を削除のためにステージング (「 」を「-」に変換) し、新しいコンテンツを含む「+」行を追加することによっても、コンテキスト行を変更できます。同様に、既存の追加または変更の「+」行を変更することもできます。すべての場合において、新しい変更はワークツリーで元に戻されたように見えます。
- 新規コンテンツ
-
パッチに存在しない新しいコンテンツを追加することもできます。各行を「+」で始めるだけで、新しい行を追加できます。追加はワークツリーで元に戻されたように見えます。
パッチを適用できなくなるため、完全に避けるべき操作もいくつかあります。
-
コンテキスト行(「 」)または削除行(「-」)の追加
-
コンテキスト行または削除行の削除
-
コンテキスト行または削除行の内容の変更
設定
このセクションのこの行より下のすべての内容は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見られるものと同じです。
GIT
git[1]スイートの一部