コマンドgit add [--all|-A]
はgit add .
と同一のようです。これは正しいです?そうでなければ、どう違うのでしょうか。
この答えはGit version 1.xにのみ適用されます。 Gitバージョン2.xの場合は、他の回答を参照してください。
要約:
git add -A
ステージすべての変更
git add .
は新しいファイルと変更をステージングします、削除なし
git add -u
は変更と削除を段階的に行います、新しいファイルなしで
詳細:
git add -A
はgit add .; git add -u
と同等です。
git add .
に関する重要な点は、それがワーキングツリーを見て、それらが変更されたか新しいか無視されていない場合、段階的な変更にそれらすべてのパスを追加することです。
git add -u
は、すべての already で追跡されているファイルを調べ、それらが異なっていたり削除されている場合はそれらのファイルへの変更をステージングします。新しいファイルは追加されず、すでに追跡されているファイルへの変更がステージングされるだけです。
git add -A
は、両方を実行するための便利なショートカットです。
この違いをテストすることができます(Gitバージョン2.xではgit add .
git status
willの出力は異なることに注意してください)。
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バージョン1.x :
Gitバージョン2.x :
長形式フラグ
git add -A
はgit add --all
と同等ですgit add -u
はgit add --update
と同等です続きを読む:
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
はgit add :/
のようなものです( トップのgitリポジトリからすべて追加 )。
git 2.7(2015年11月)では、 ":
"という名前のフォルダーを追加できるようになります。
commit 29abb33 (2015年10月25日)/ Junio C Hamano(gitster
) を参照。
git 2.0(2014年第1四半期または第2四半期) 、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 commit -a
"や他のコマンドとの一貫性のためにGit 2.0のツリー全体を操作します 。 "git add -u
"を "git add -u .
"のように動作させるメカニズムはないため、現在のサブディレクトリ内のパスのインデックスのみを "git add -u
"で更新して指のトレーニングを開始することは重要です。 Git 2.0が登場する前に「git add -u .
」と明示的に言ってください。これらのコマンドがpathspecなしで実行された場合や、カレントディレクトリ 以外でローカルに変更があった場合は、このような状況ではGit 2.0の動作が今日のバージョンと異なるため警告が出されます。
Charlesの指示 から、テスト後の私の提案された理解は次のようになります。
# 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 add -A
git add .
git add -u
ものが変わった Git 2.0では:
-A
がデフォルトになりました--ignore-removal
で利用可能になりましたgit add -u
とgit add -A
は、ツリー全体に作用します。だからgit 2の答えは:
git add .
とgit add -A .
は、現在のディレクトリに新しい/変更された/削除されたファイルを追加しますgit add --ignore-removal .
はカレントディレクトリに新しい/変更されたファイルを追加しますgit add -u .
はカレントディレクトリに修正/削除されたファイルを追加しますIn 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がどのように「追加する」かについての重要な背景知識。
さて、その知識があれば、上記の答えを適用することができます。
リミッターは以下の通りです。
Pathspecは次のとおりです。
git add -A .
git add -u .
結論として、私の方針は、
git add .
と等しいgit add -A .
は、現在のフォルダとその子フォルダからのみインデックスにファイルを追加します。
git add -A
は、作業ツリーのすべてのフォルダからインデックスにファイルを追加します。
P.S .: Git 2.0に関する情報。
-Aオプションは、作業ツリーと一致するように索引項目を追加、変更、および削除します。
GIT 2では、-A
オプションがデフォルトになりました。
Gitドキュメンテーション のように、現在のディレクトリに更新の範囲を制限する.
が追加された場合
-Aオプションを使用したときに
<pathspec>
が指定されていない場合は、作業ツリー全体のすべてのファイルが更新されます(古いバージョンのGitは現在のディレクトリとそのサブディレクトリに更新を制限するために使用されます)。
私が追加する1つのことは、--interactive
または-p
モードが使用されている場合、git addはupdate(-u
)フラグが使用されているかのように動作し、新しいファイルを追加しないことです。
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
を実行すると、どこからコマンドを実行しても、確実にこの変更が行われます。
これが違いを解消することを願っています。