git addコマンドの使い方!ステージエリアにファイルを追加する!

git Git

gitのgit addコマンドの使い方について書いています。
git addコマンドの説明の後に、実際にコマンドを使用したり、使いそうなトピックスを紹介しています。

載せているコマンドについては、Gitのバージョン2.32.0で確認しました。
git addについての公式のドキュメントは、こちらにあります。

git addコマンドとは?

git addコマンドを使うと、ステージエリアにファイルを追加することができます。

gitではステージエリアに、新規のファイルや編集したファイルを一度乗せた後にコミットします。
ファイルをステージエリアに追加したら、git commitコマンドを使ってコミットします。

その後、git pushコマンドを使用することで、ステージエリアに乗せたファイルをリモートリポジトリにプッシュ(同期)します。

コミットからプッシュまでのコマンドを実際に試してみた記事があるので、リンクをおいておきます。
・【Git入門】commitした後にgit pushしてみよう【わかりやすく解説】

ステージエリアにファイル追加する

実際にファイルを追加する場合には、下記のようにコマンドを使用します。

$ git add ファイルパス

git addコマンドの後に、追加したいファイルまでのパスを記載します。
実行するとステージエリアに追加されます。

試してみる

実際にgit addコマンドを使ってみます。
今回はscriptディレクトリ配下に、main.jsファイルを作成しました。

git statusコマンドで現在の状態を確認すると、下記のようにUntracked fileの方に追加したファイルが表示されています。

$ git status
HEAD detached at ff30a53
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        script/

表示を確認したら、下記のようにコマンドを使用します。

$ git add script/main.js

そして、もう一度git statusコマンドで状態を確認します。
そうすると、下記のように”Changes to be committed”の箇所に追加されました。

$ git status            
HEAD detached at ff30a53
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   script/main.js

これで、コミットが可能な状態になっています。

git addで複数ファイルを追加したい

git addで複数ファイルをステージエリアに追加する方法です。

全てのファイルを追加する

全てのファイルを追加する場合には、下記のコマンドを使用します。

$ git add -A

このコマンドはプロジェクト配下のどこにいても、変更や新規作成された全てのファイルが対象になります。

指定ディレクトリ配下の全てのファイルを追加する

指定ディレクトリ配下の変更や、新規作成した全てのファイルを追加するには「.」を指定します。

$ git add .

現在のカレントディレクトリ配下の全てが対象になります。
そのため、プロジェクトディレクトリのトップで実行すると、全てになります。
(※特定のディレクトリ配下で実行すると、そのディレクトリ配下の全てになります)

更新があった全てのファイルを対象にする

新規を対象にせずに、更新のあった全てのファイルのみを対象にするには、下記のコマンドを使用します。

$ git add -u

こうすると、変更があった全てのファイルが対象になります。
このコマンドもプロジェクト配下のどこでも使えます。

ファイルパスを複数指定して追加する

ファイルパスを複数指定して、指定したファイルのみをステージエリアに追加することができます。
下記のように、コマンドの後に複数のファイルパスを指定することが可能です。

$ git add ファイルパス1 ファイルパス2 ファイルパス3...

例としては、下記のように複数指定できます。

$ git add .env.example config/app.php app/Http/Controllers/LogTesterController.php

ワイルドカードを使用して追加する

ワイルドカードを使用して、ファイルを複数追加することも可能です。
例えば、下記のように使用します。

$ git add config/*

こうすると、config配下の変更・新規ファイルが全て対象になります。
他にも、下記のように特定のファイルの種類を対象にすることができます。

$ git add *.md

上記の場合だと、現在のカレントディレクトリにあるマークダウン(.md)ファイルを対象に追加します。

追加されるファイルを確認する

-nオプションを使うことで、ファイルを追加する前に、追加対象のファイルを確認することができます。
コマンドを実行すると、下記のように追加されるファイルパスを確認することができした。

$ git add *.md -n
add 'test2.md'
add 'test3.md'

追加したファイルをステージエリアから戻したい

ステージエリアからファイルを戻すには、git resetコマンドを使用します。

$ git reset

オプションなど、何もつけずに使うとステージエリアに乗せたファイルを全て解除します。
ステージエリアに乗せた一部のファイルを解除するには、ファイルパスを渡します。

$ git reset ./test2.md

こうすることで、指定したファイルのみ解除することができます。

git resetコマンドについては、下記に書いたので確認してみてください。
・git resetの使い方!ステージのリセット・コミットの取り消し

オプション一覧

自動翻訳したgit addのオプション一覧です。

オプション 説明
<pathspec>... コンテンツを追加するファイル。ファイルグロブ (例: *.c) を指定して、一致するすべてのファイルを追加できます。また、先頭のディレクトリ名 (例: dir を指定して dir/file1dir/file2 を追加) を指定して、ディレクトリ全体の現在の状態に一致するようにインデックスを更新できます (例: dir を指定すると、作業ツリーで変更されたファイル dir/file1、作業ツリーに追加されたファイル dir/file2 だけでなく、作業ツリーから削除されたファイル dir/file3 も記録されます)。古いバージョンの Git では、削除されたファイルは無視されていました。変更または新しいファイルを追加するが、削除されたファイルは無視する場合は、--no-all オプションを使用します。 構文の詳細については、gitglossary(7) の pathspec のエントリを参照してください。
-n, --dry-run 実際にはファイルを追加せず、ファイルが存在するかどうか、および/または無視されるかどうかを表示するだけです。
-v, --verbose 冗長に表示します。
-f, --force 通常は無視されるファイルの追加を許可します。
--sparse スパースチェックアウトコーンの外側のインデックスエントリの更新を許可します。通常、git add は、パスがスパースチェックアウトコーン内に収まらないインデックスエントリの更新を拒否します。これらのファイルは予告なしに作業ツリーから削除される可能性があるためです。詳細については、git-sparse-checkout(1) を参照してください。
-i, --interactive 作業ツリー内の変更されたコンテンツを対話的にインデックスに追加します。オプションのパス引数を指定して、操作を作業ツリーのサブセットに限定できます。詳細については、「対話モード」を参照してください。
-p, --patch インデックスと作業ツリーの間でパッチの hunk を対話的に選択し、それらをインデックスに追加します。これにより、ユーザーは変更されたコンテンツをインデックスに追加する前に差分を確認できます。これは事実上 add --interactive を実行しますが、最初のコマンドメニューをバイパスして、直接 patch サブコマンドにジャンプします。詳細については、「対話モード」を参照してください。
-e, --edit エディターでインデックスとの差分を開き、ユーザーがそれを編集できるようにします。エディターが閉じられた後、hunk ヘッダーを調整し、パッチをインデックスに適用します。このオプションの目的は、適用するパッチの行を選択したり、ステージングされる行の内容を変更したりすることです。これは、対話型の hunk セレクターを使用するよりも迅速かつ柔軟です。ただし、混乱してインデックスに適用されないパッチを作成するのは簡単です。下記の「パッチの編集」を参照してください。
-u, --update インデックスに <pathspec> に一致するエントリが既にある場合にのみ、インデックスを更新します。これにより、作業ツリーに合わせてインデックスエントリが削除および変更されますが、新しいファイルは追加されません。-u オプションを使用するときに <pathspec> が指定されていない場合、作業ツリー全体の追跡対象ファイルがすべて更新されます (古いバージョンの Git では、更新は現在のディレクトリとそのサブディレクトリに限定されていました)。
-A, --all, --no-ignore-removal 作業ツリーに <pathspec> に一致するファイルがある場合だけでなく、インデックスにエントリが既にある場合にも、インデックスを更新します。これにより、作業ツリーに合わせてインデックスエントリが追加、変更、および削除されます。-A オプションを使用するときに <pathspec> が指定されていない場合、作業ツリー内のすべてのファイルが更新されます (古いバージョンの Git では、更新は現在のディレクトリとそのサブディレクトリに限定されていました)。
--no-all, --ignore-removal インデックスに不明な新しいファイルと作業ツリーで変更されたファイルを追加することによりインデックスを更新しますが、作業ツリーから削除されたファイルは無視します。このオプションは、<pathspec> が使用されていない場合は何もしません。このオプションは主に、古いバージョンの Git に慣れているユーザーを支援するためのものです。古いバージョンの Git では、”git add …” は “git add –no-all …” の同義語であり、削除されたファイルを無視していました。
-N, --intent-to-add 後でパスが追加されるという事実のみを記録します。コンテンツなしでパスのエントリがインデックスに配置されます。これは、特に git diff でそのようなファイルのステージされていないコンテンツを表示したり、git commit -a でコミットしたりする場合に役立ちます。
--refresh ファイルを追加するのではなく、インデックス内のファイルの stat() 情報を更新するだけです。
--ignore-errors 一部のファイルがインデックス作成エラーのために追加できなかった場合、操作を中断せずに他のファイルの追加を続行します。コマンドは引き続きゼロ以外のステータスで終了します。構成変数 add.ignoreErrors を true に設定すると、これがデフォルトの動作になります。
--ignore-missing このオプションは --dry-run と組み合わせてのみ使用できます。このオプションを使用することで、ユーザーは、作業ツリーにすでに存在するかどうかにかかわらず、指定されたファイルのいずれかが無視されるかどうかを確認できます。
--no-warn-embedded-repo デフォルトでは、git add は、.gitmodules にエントリを作成するために git submodule add を使用せずに、埋め込みリポジトリをインデックスに追加すると警告を表示します。このオプションは、(たとえば、サブモジュールに対して手動で操作を実行している場合など) 警告を抑制します。
--renormalize 間違った CRLF/LF 行末で追加されたファイルを修正するために、core.autocrlf 構成または text 属性を変更した後で、追跡対象のすべてのファイルに「クリーン」プロセスを新たに適用して、再度インデックスに強制的に追加します。このオプションは -u を暗黙的に指定します。
--chmod=(+|-)x 追加されたファイルの実行可能ビットを上書きします。実行可能ビットはインデックス内でのみ変更され、ディスク上のファイルは変更されません。
--pathspec-from-file=<file> Pathspec は、コマンドライン引数の代わりに <file> で渡されます。<file> が正確に - の場合は、標準入力が使用されます。Pathspec 要素は LF または CR/LF で区切られます。Pathspec 要素は、構成変数 core.quotePath (git-config(1) を参照) で説明されているように引用符で囲むことができます。--pathspec-file-nul およびグローバルの --literal-pathspecs も参照してください。
--pathspec-file-nul --pathspec-from-file でのみ意味があります。Pathspec 要素は NUL 文字で区切られ、他のすべての文字は (改行と引用符を含めて) 文字通りに解釈されます。
-- このオプションは、コマンドラインオプションとファイルのリストを区切るために使用できます (ファイル名がコマンドラインオプションと間違われる可能性がある場合に役立ちます)。

コメント

タイトルとURLをコピーしました