Gitコマンド

git add

作業ツリーで変更した内容を使って、インデックスを更新します。

git add の概要

git add は、作業ツリー変更を行ったフィアルをインデックスに追加するコマンドです。

実際にレポジトリに変更を保存するコマンドは「git commit」です。一方で Git では、作業ツリーに作成した変更のうち、どのファイルを実際にコミットに含めるかを指定するため、インデックスと呼ばれる特別な保存領域に更新内容を追加します。この操作は、「ステージングする」「ステージする」などと呼ばれることがあります。もしくは単純に「インデックスを更新する」と言います。

git add の実行によって、リポジトリの状態が変更されることはありません。git commit コマンドを実行した時にだけ、コミットが追加されます。

Git では git add を使ってインデックスを操作し、1つのコミットを変更の意図が分かりやすい単位に分割してコミットを作成する事が推奨されています。そうすることで、更新の一つ一つを「特定の変更意図の単位」として記録する事が Git を使ったワークフローの基本思想でもあります。

使用例

git add によりファイルをステージングし、その後 git commit によりコミットを作成するのが最も一般的な作業の流れです。

// 現在のディレクトリのすべてのファイルをインデックスに追加
git add .

// インデックスの状態からそのままコミットを作成
git commit

Git によるファイルの追跡

git add により、ファイルが一度インデックスに追加されれば、そのファイルはその後、常にGit による「追跡」の対象になります。追跡対象となったファイルは、常に変更状態を監視される事になります。これは git status を

追跡されているということは、git commit の対象に含まれるかどうかは別の問題です。但し、将来的に、コミットするつもりの無いファイルであれば、追跡対象から外すべきでしょう。

ファイルの追跡を停止するには git rm を実行して、明示的に追跡対象から外す必要があります。また、その後また「git add .」の実行により、インデックスに追加され追跡対象となってしまう恐れがあるので、追跡する必要が無いファイルは、作業ツリーから削除するか、もしくは、「.gitignore」にそのファイル名を書き込むことで、git add でインデックスに追加される事を明示的に禁止できます。

作業ツリー内にあるすべてのファイルは、「追跡されている」か「追跡されていない」のどちらかの状態となります。

もし興味があれば、以下のコマンドで追跡対象のファイルを一覧できます。

git ls-tree -r <Branch Name> --name-only

主要なオプション

-A, --all

すべての追跡対象のファイルについて、インデックスを更新します。

ですので、まだ追跡対象となっていないファイルはステージされることはありません。明示的にgit add <file name> としてステージする必要があります。

但し、–A の場合のみ(もし引数にファイル名を指定しなければ)作業ツリー内の全てのファイルをインデックスに追加します。これは「git add .」とよく似た動きをします。

通常は、このオプションの代わりに、入力が簡単な git add . のほうを使うことが多いかもしれません。(状況に依ります)

関連する git コマンド

git status

作業ディレクトリおよびステージングエリアの状態を確認するために、git status コマンドを使います。

git commit

インデックスの状態を使って、変更をレポジトリに記録します。

git diff

作業ツリーの状態と、インデックスの状態を比較します。また、コミット同士を比較したり、オプション「--cached」を付けることで、インデックスの状態をほかのスナップショット(過去のコミットなど)と比べることもできます。

git reset

インデックスの状態を更新した後でも、「git reset HEAD」の実行により、作業ツリーの変更状態を保ったまま、インデックスの状態をブランチの先頭の状態に戻す事ができます。コミットをする直前に、どのファイルをコミットに加えるべきか調整する時によく利用します。

git rm

インデックスからファイルを削除し、Git による追跡を停止します。実際のファイルは作業ツリーに残りますので、ファイルを削除するには、シェルコマンドの rm などで実際にファイルシステムから取り除く必要があります。

その他のオプション

git addで利用可能な主なオプション

オプション 詳細
--all 追跡中のすべてのファイルでインデックスを更新します。
--A 作業ツリーのすべてのファイルをインデックスに追加します。

Git公式ドキュメント

Git公式ドキュメント「git add」へのリンクです。