回答:
この回答はGitバージョン1.xにのみ適用されます。Gitバージョン2.xについては、他の回答を参照してください。
概要:
git add -A
すべての変更をステージング
git add .
削除せずに新しいファイルと変更をステージング
git add -u
新しいファイルなしで、変更と削除を段階的に行う
詳細:
git add -A
と同等 git add .; git add -u
です。
重要な点git add .
は、ワーキングツリーを見て、変更された場合、または新規で無視されない場合、ステージングされた変更にすべてのパスを追加することであり、「rm」アクションをステージングしません。
git add -u
は、すでに追跡されているすべてのファイルを調べ、それらが異なる場合や削除された場合に、それらのファイルへの変更を段階的に行います。新しいファイルは追加されず、すでに追跡されたファイルへの変更がステージングされるだけです。
git add -A
これらの両方を実行するための便利なショートカットです。
あなたはこのような何か(Gitのバージョンのためのあなたの出力から2.xというノートが持つアウトの違いをテストすることができgit add .
git status
ます異なる可能):
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
git add -A -p
ことは期待どおりに機能しません(追跡されていないファイルについて対話形式で尋ねます)
git add -A :/
またはgit add -A .
git add -u
ではgit add -u :/
、後者のパラメーターがパスになり、特定のディレクトリを-uできるようになり:/
、ツリー全体を処理します。
git add -u
git add .
add -u
add -u1
add-u2
以下は、すぐに理解できる表です。
Gitバージョン1.x:
Gitバージョン2.x:
長い形式のフラグ:
git add -A
に相当 git add --all
git add -u
に相当 git add --update
参考文献:
git add .
現在のパス上にある新しいファイルを追加するだけなので、これは完全には当てはまりません。つまり、新しいディレクトリがある場合../foo
、git add -A
ステージングしますが、しgit add .
ません。
git add .
と等価であるgit add -A .
に相当する、git add "*"
Git 2.0、git add -A
デフォルトである:git add .
等しいですgit add -A .
。
git add <path>
は「git add -A <path>
」と同じなので、「git add dir/
」はディレクトリから削除したパスに気づき、削除を記録します。
古いバージョンのGitでは、git add <path>
」は削除を無視していました。本当に必要な場合
git add --ignore-removal <path>
は<path>
、「」と発声して、追加または変更されたパスのみをに追加できます。
git add -A
のようなものですgit add :/
(トップのgit repoフォルダからすべてを追加してください)。
git 2.7(2015年11月)では、:
「」という名前のフォルダーを追加できることに注意してください。Junio C Hamano()によるコミット29abb33(2015年10月25日)を
参照してください。 gitster
なお、開始gitの2.0(Q1またはQ2 2014) 、について話したときにgit add .
(作業ツリー内の電流パス)、あなたは「を使用しなければならない.
他に」git add
同様のコマンド。
つまり:
「
git add -A .
」に相当します「git add .; git add -u .
」
(およびの余分な「.
」に注意してくださいgit add -A
git add -u
)
そのためgit add -A
か、git add -u
上の(唯一のgit 2.0以降)動作する全体の作業ツリーだけではなく、現在のパス上に。
これらのコマンドは、Git 2.0のツリー全体で機能し、「
git commit -a
」およびその他のコマンドとの整合性を保ちます。"git add -u
"のように動作するメカニズムがないためgit add -u .
、 "git add -u
"(pathspecなしで)現在のサブディレクトリのパスのみのインデックスを更新することに慣れている人は、指でトレーニングを開始して明示的に言うことが重要ですgit add -u .
"彼らがGit 2.0が登場する前にそれを意味するとき。これらのコマンドがpathspecなしで実行され、現在のディレクトリ以外でローカルに変更があった場合、Git 2.0の動作はそのような状況では現在のバージョンと異なるため、警告が発行されます。
チャールズの指示から、私の提案した理解をテストした後、次のようになります:
# For the next commit
$ git add . # Add only files created/modified to the index and not those deleted
$ git add -u # Add only files deleted/modified to the index and not those created
$ git add -A # Do both operations at once, add to all files to the index
このブログ投稿は、これらのコマンドが適用される状況を理解するのにも役立ちます:Git作業ディレクトリからの削除済みファイルの削除。
Git 2.0での変更点(2014-05-28):
-A
現在はデフォルトです--ignore-removal
。git add -u
またgit add -A
、コマンドラインにパスのないサブディレクトリでは、ツリー全体を操作します。したがって、Git 2の場合の答えは次のとおりです。
git add .
そして git add -A .
、現在のディレクトリに新しい/変更/削除されたファイル追加しますgit add --ignore-removal .
現在のディレクトリに新しい/変更されたファイルを追加しますgit add -u .
変更/削除されたファイルを現在のディレクトリに追加しますより蒸留された簡単な答え:
git add -A
git add .
git add -u
git add :/
+git add -u :/
でGitの2.xの:
あなたは、に直接配置されている場合、作業ディレクトリ、その後、git add -A
およびgit add .
差異のない仕事。
あなたは、任意のサブディレクトリにある場合は、作業ディレクトリ、git add -A
全体からすべてのファイルを追加します作業ディレクトリ、およびgit add .
あなたからファイルを追加します、現在のディレクトリ。
そして、それだけです。
これがさらに明確になることを願っています。
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
リミッターは-uまたは-Aまたはnilです。
pathspecは、ファイルパスまたはドット、「。」です。現在のディレクトリを示します。
Gitが「追加」する方法に関する重要な背景知識:
-A
指定がない限り、再帰的ではありません。ドットは厳密に現在のディレクトリを参照します-上下にあるパスは省略されます。今、その知識があれば、上記の答えを適用できます。
リミッターは以下の通りです。
-u
= --update
=追跡ファイルのサブセット=>追加=いいえ; 変更=はい。削除=はい。=> アイテムが追跡されている場合。-A
= --all
(そのような-a
ものはなく、構文エラーが発生します)=すべての追跡されていない/追跡されているファイルのスーパーセット。2.0より前のGitでない限り、ドットファイル指定が指定されている場合、その特定のフォルダーのみが考慮されます。=> アイテムが認識された場合、git add -A
それを見つけて追加します。pathspecは次のとおりです。
git add -A .
git add -u .
結論として、私の方針は:
git status
ます。.gitignore
通常は対象のファイルのみが追跡されず、認識されないように、適切なファイルを用意します。git add .
equals git add -A .
は、現在のフォルダーと子フォルダーからのみインデックスにファイルを追加します。
git add -A
作業ツリーのすべてのフォルダからインデックスにファイルを追加します。
両方ともgit add .
、git add -A
Gitの新しいバージョンですべての新規、変更、削除されたファイルをステージングします。
違いはgit add -A
、作業中のGitリポジトリに属する「上位、現在、およびサブディレクトリ」にファイルをステージングすることです。しかし、やってgit add .
のみ(これを、次の現在のディレクトリ内のファイルやサブディレクトリをステージません外部にあるファイル上位ディレクトリ)で)。
次に例を示します。
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
現在の作業ディレクトリである場合は/my-repo
、あなたがないrm rootfile.txt
、そしてcd subfolder
、続いてgit add .
、それはなりません削除されたファイルをステージ。ただしgit add -A
、どこからコマンドを実行しても、この変更は確実にステージングされます。
の -A
オプションは、作業ツリーに一致するようにインデックスエントリを追加、変更、および削除します。
Git 2では、この-A
オプションがデフォルトになりました。
Gitのドキュメント.
に従って、更新の範囲を現在のディレクトリに制限するa が追加された場合
<pathspec>
-Aオプションの使用時にno を指定すると、作業ツリー全体のすべてのファイルが更新されます(古いバージョンのGitは、更新を現在のディレクトリとそのサブディレクトリに制限するために使用されていました)。
追加したいことの1つは、--interactive
or -p
モードを使用git add
すると、更新(-u
)フラグを使用した場合と同様に動作し、新しいファイルを追加しないことです。
git add *
ますか?