開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

git add のオプション一覧と、動作仕様のまとめ。

最終更新:2017-09-25 by Joe

git addのオプションと、それぞれと動作仕様についてまとめました。

git add の概要

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

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

git addの動作仕様
git addはインデックスを更新するためのコマンド

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

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

git commit の動作
git commit によって、インデックスの状態を元にして、新しいコミットが作成される。

インデックスGit によるファイルの追跡

git commit により、git レポジトリに追加されたファイルは、その後常にGit による「追跡」の対象になります。追跡対象となったファイルは、常に変更状態を監視される事になります。

「追跡されている」事と、git commit を実行したとき、変更を記録する対象に含まれるかどうかは別の問題です。但し、将来的に、絶対にコミットするつもりの無いファイルであれば、追跡対象から外すべきでしょう。

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

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

以下のコマンドで、どのファイルが追跡対象となっているかを一覧できます。

// 特定のブランチの追跡対象のファイル名をリストする
git ls-tree -r <branch name> --name-only

git add の主要なオプション一覧

-A, --all

すべての追跡対象のファイルについて、インデックスを更新します。まだ追跡対象となっていないファイルは、そのようなファイルが作業ツリーにあれば、明示的にgit add <path/file name> と実行してステージする必要があります。一度インデックスに追加されていれば、まだ追跡対象でなくとも、そのファイルの更新(ファイルの削除を含む)は取り込まれます。

但し、「git add --A」 の場合のみ(もし引数にファイル名を指定しなければ)作業ツリー内の全てのファイルをインデックスに反映します。これは「git add .」とよく似た動きですので、むしろ、入力が簡単なそちらを利用することが多いでしょう。

-v, --verbose

追加したファイルについて、出力します。「git add .」のように、ディレクトリを指定した場合、どのようなファイルがadd されたかを確認するのに便利です。

// 実行の例
$ git add -v .

// 出力
add 'includes/functions.php'
add 'includes/class-xxxxx.php'
add 'includes/class-yyyy.php'
remove 'includes/class-zzzz.php'
modify 'includes/posts.php'

-f, --force

.gitignore に書かれているファイルを「git add <file>」と実行してもgit add する事はできませんが、このfオプションを使えば、強制的にadd する事ができます。

-u, --update

追跡対象のファイルと、すでにインデックスに追加したファイルについて、更新内容(ファイルの削除も含む)をインデックスを取り込みます。git add -u <path/file>とすれば、取り込むファイルを限定することもできます。

関連する git コマンド

git status

作業ツリー、およびインデックスの変更状態を確認します。

git commit

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

git diff

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

git reset

git addでおこなったインデックスの変更を取り消します。

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

git rm

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

参考

閉じる