1. 記事一覧 >
  2. ブログ記事
category logo

git add -A、git add . の違いとその他 git add まとめ

(更新) (公開)

はじめに

git add コマンドですが、git add -Agit add . の違いが気になり、いろいろ調べていたところ、以下の stackoverflow の表を見つけました。 日本語にしただけで、ほぼそのまま転記になりますが、その他の git add コマンドも含め、具体的にどうなるのか調査してみました。


コマンド新規作成更新削除ステージング対象
git add -A新規作成・更新・削除 全て
git add .カレントフォルダ内の新規作成・更新・削除 全て
git add --ignore-removal .新規作成・更新
git add -u更新・削除のみ

※Git Vertion 1.xの表もありますが、今回、Git Vertion 2.x のみの話とします。


git add -A は、 git add --all と同じ意味になります。
git add -u は、 git add --update と同じ意味になります。
git add は、git stage と同じ意味になります。


検証環境は、git version 2.25.1 です。
シェルは、bashで GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu) です。


まとめ

検証結果の前にいきなりまとめを先出ししますと、

コマンド新規作成更新削除ステージング範囲ステージング対象
git add -Aリポジトリ全て新規作成・更新・削除
git add .カレントフォルダ内新規作成・更新・削除
git add :カレントフォルダ内新規作成・更新・削除
git add :/リポジトリ全て新規作成・更新・削除
git add ":(top)"リポジトリ全て新規作成・更新・削除
git add --ignore-removal-エラー(ドットが必要)
git add --ignore-removal .カレントフォルダ内新規作成・更新
git add -uリポジトリ全て更新・削除
git add -u .カレントフォルダ内更新・削除

となりました。

【コロン (:)について】

コロン (:)ですが、pathspecという仕様で、:の後に書く内容によって、様々な意味を持たせることができるものです。今回は、リポジトリトップを表す「:/」「:(top)」と たまたまやってみたら「.」と同じ意味になった「:」(コロンのみ)で検証しました。


検証対象

リポジトリは、以下のような構造を前提とします。


リポジトリトップで実行の結果

$ git add -A
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   dir1/file2.txt
        deleted:    dir2/file3.txt
        new file:   file4.txt

git add -A の結果は、


modified:   dir1/file2.txt
deleted:    dir2/file3.txt
new file:   file4.txt

となりました。


以下、その他のコマンドの結果のまとめです。

コマンドステージング結果
git add -Amodified: dir1/file2.txt
deleted: dir2/file3.txt
new file: file4.txt
git add .modified: dir1/file2.txt
deleted: dir2/file3.txt
new file: file4.txt
git add :modified: dir1/file2.txt
deleted: dir2/file3.txt
new file: file4.txt
git add :/modified: dir1/file2.txt
deleted: dir2/file3.txt
new file: file4.txt
git add ":(top)"modified: dir1/file2.txt
deleted: dir2/file3.txt
new file: file4.txt
git add --ignore-removalエラー:Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
git add --ignore-removal .modified: dir1/file2.txt
new file: file4.txt
git add -umodified: dir1/file2.txt
deleted: dir2/file3.txt
git add -u .modified: dir1/file2.txt
deleted: dir2/file3.txt

ディレクトリ内で実行の結果

dir1 ディレクトリに移動した後の実行結果です。

$ cd dir1
$ git add -A
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   file2.txt
        deleted:    ../dir2/file3.txt
        new file:   ../file4.txt

git add -A の結果は、


modified:   file2.txt
deleted:    ../dir2/file3.txt
new file:   ../file4.txt

となりました。


以下、その他のコマンドの結果のまとめです。

コマンドステージング結果
git add -Amodified: file2.txt
deleted: ../dir2/file3.txt
new file: ../file4.txt
git add .modified: file2.txt
git add :modified: file2.txt
git add :/modified: file2.txt
deleted: ../dir2/file3.txt
new file: ../file4.txt
git add ":(top)"modified: file2.txt
deleted: ../dir2/file3.txt
new file: ../file4.txt
git add --ignore-removalエラー:Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
git add --ignore-removal .modified: file2.txt
git add -umodified: file2.txt
deleted: ../dir2/file3.txt
git add -u .modified: file2.txt

loading...