git add -u と git add -A と git add . の違い

Modified: | Tags: Git

Gitにおいて、git addコマンドは指定したファイルをインデックスに登録してコミット対象にする。ここでは、git add -ugit add -Agit add .の違いを説明する。

git addの基本的な使い方

git addは、指定したファイルをインデックスに登録してコミット対象にするコマンド。

$ git add <file>

# 例
$ git add text.txt

<file>には、*を使ったワイルドカードによる指定もできる。

$ git add *.py  # カレントディレクトリのすべての.pyファイルをadd

git add -ugit add -Agit add .の違い

git addにオプションを付けることで、複数のファイルをまとめて登録できる。

git add -u (git add --update)

  • バージョン管理されていて、変更があったすべてのファイルがaddされる
    • 変更されたファイル、削除されたファイルがaddされる
  • バージョン管理されていないファイルはaddされない
    • 新しく作られたファイルはaddされない

git add -A (git add --all)

  • 変更があったすべてのファイルがaddされる
    • 変更されたファイル、削除されたファイル、新しく作られたファイル、すべてがaddされる

git add .

  • カレントディレクトリ以下の、変更があったすべてのファイルがaddされる
    • カレントディレクトリ以下の、変更されたファイル、削除されたファイル、新しく作られたファイル、すべてがaddされる
    • 注意: Git 1.xでは削除されたファイルはaddされない

以下のリンクの表が分かりやすかった。

New Files Modified Files Deleted Files
git add -u ×
git add -A
git add . ○(Git 2.0以降)

注意点

上の表では表現されていないが、厳密にはgit add -Agit add .は動作に違いがある。

git add -ugit add -Aはリポジトリ内のどこで実行してもリポジトリ全体を処理するが、git add .はカレントディレクトリ以下のみを処理する。

例えば、リポジトリ内にdir1dir2のディレクトリがある場合。

repository_dir
├── dir1
└── dir2

dir1git add .を実行すると、dir2の変更はaddされない。

一方、git add -Aはどこで実行してもリポジトリ内のすべての変更がaddされる。

関連カテゴリー

関連記事