Chapter 3.2 - Basic operation - Staging
repositoryにファイルの変更を記録する(commitする)にあたって、ユーザーはrepository内のどのファイルやディレクトリを対象とするか指定する必要があります。git add
コマンドを使うことでstaging areaにファイルやディレクトリを追加することによって、後に続くgit commit
コマンドでrepositoryにcommitするファイルやディレクトリを指定することができます。また、git add
とは逆に「ファイルをGitの監視対象から外したい」というときに使うコマンドのgit rm
についても指定されたファイルはgit add
と同様にstaging areaで扱います。
git add
, git rm
コマンドでcommitの対象として指定できるのは、
- working directoryに新しく追加されたファイル (未追跡ファイル, untracked file)
- 直前のcommitから内容が変更されているファイル (変更済みファイル, changed file)
- Gitによる変更の追跡を解除される(予定の)ファイル (削除済みファイル, deleted file)
これらのファイルです。working directoryに新規追加されたファイルや変更済みのファイルであっても、git add
やgit rm
によってstaging areaに追加されなければrepositoryにそれらの変更は記録されることはありません。一見するとcommitするファイルを一度わざわざstaging areaに追加するというステップは無駄であるように見えるかもしれませんが、例えば「一度に2つの機能を実装してしまったがそれぞれの機能ごとにcommitしたい」といったようなケースにおいて「commitしたいファイルを明示的に指定できる」というのは非常に有用になります。
監視対象のファイルがどういう状態にあるかはgit status
コマンドを使って確認することができます。色が補完されるCUI環境であれば、ファイルやディレクトリの状態を色付きで見ることができ、どのファイルが変更されているか、どのファイルが未追跡ファイルか、そのうちどれが次のcommitでrepositoryに記録されるかを確認することができます。
git add
$ git add <file_path_to_stage>
git add
コマンドは引数にファイルパスを受け取りますが、オプションの指定やワイルドカードの使用によってファイルの一括追加もできます。
e.g.)
# working directory内の全てのchanged files, untracked filesを追加する
$ git add .
# working directory内の全てのchanged files, deleted filesを追加する
$ git add -u
$ git add --update
# working directory内の全てのファイル(changed, untracked, deleted)を追加する
$ git add -A
# ディレクトリ内のファイルも再帰的に追加する
$ git add <directory_path>
git rm
$ git rm <file_path_to_stage>
git rm
コマンドは引数で受け取ったファイルパスにあるファイルを削除し、Gitにそれ以降そのファイルの変更履歴を追跡させないようにするコマンドです。オプションの指定によって、ファイルを残したまま変更履歴の追跡だけをやめさせたりすることができます。
e.g.)
# ファイルの追跡を解除し、ファイルを削除する
$ git rm <file_path>
# ディレクトリの追跡を解除し、ディレクトリを削除する
$ git rm -r <directory_path>
# ファイルを削除せずに追跡を解除する
$ git rm --cached <file_path>