Git の基本 | git add

git add コマンド

git add は、作業ディレクトリの変更をステージングエリアに追加するためのコマンドである。このコマンドは、各ファイルの更新内容を次のコミット対象に含めるよう Git に指示する。ただし、git add だけではローカルリポジトリには何も記録されない。変更が実際に記録されるのは git commit を実行した後である。

このワークフローでは、作業ディレクトリとステージングエリアの状態を確認するために git status コマンドを使用する。

使い方

git add <file>

<file> に加えられたすべての変更をステージングし、次のコミット対象にする。

git add <directory>

<directory> 配下のすべての変更をステージングし、次のコミット対象にする。

git add -p

対話型のステージングセッションを開始する。対話型ステージングでは、ファイルの一部だけを選択してステージングし、次のコミット対象にできる。このコマンドを実行すると変更内容が表示され、入力を求められる。y を入力するとその部分をステージングし、n を入力すると無視し、s を入力するとより小さな単位に分割し、e を入力すると手動で編集できる。q を入力すると対話型セッションを終了する。

補足説明

git addgit commit は Git の基本的なワークフローを構成する。チームの協業モデルがどのようなものであっても、すべての Git ユーザーはこの 2 つのコマンドを理解しておく必要がある。これらは、プロジェクトの履歴をバージョンリポジトリに記録するための方法である。

プロジェクトが進むにつれて、編集、ステージング、コミットという基本パターンを繰り返す。
まず、作業ディレクトリにあるファイルを編集する。
現在の作業ディレクトリの状態を保存したいときは、git add を使って変更をステージングする。
ステージングされたスナップショットに問題がなければ、git commit を使ってそれをローカルリポジトリにコミットする。

Git チュートリアル: git add Snapshot

git add コマンドを、ファイルをリポジトリに追加する svn add コマンドと混同してはならない。git add は変更に対して、より抽象的なレベルで動作する。つまり、svn add は各ファイルに対して一度だけ呼び出すコマンドだが、git add はファイルを変更するたびに呼び出す必要がある。これは冗長に見えるかもしれないが、この流れに従うことでプロジェクトを整理された状態に保ちやすくなる。

ステージングエリア

ステージングエリアは Git 独自の機能の 1 つであり、SVN や Mercurial に慣れている人には理解しづらい概念かもしれない。これは作業ディレクトリとローカルリポジトリの間にあるバッファだと考えるとよい。

ステージングエリアを使うと、前回のコミット以降のすべての変更を一度にコミットする必要がない。関連性の強い変更だけを分けて、焦点の明確なスナップショットを作成し、それを実際にコミットできる。つまり、必要に応じてファイルを編集した後、関連する変更をステージングエリアに整理し、小さな単位でコミットすることで、論理的に整理されたコミットを作成できる。他のバージョン管理システムでも同じだが、プロジェクトの他の部分への影響を最小限に抑え、バグの原因追跡や取り消しを容易にするため、1 回のコミットは小さく保つことが重要である。

使用例

新しいプロジェクトを始めるとき、git addsvn import と同じような役割を持つ。現在のディレクトリで最初のコミットを行う場合は、次の 2 つのコマンドを使用する。

git add .
git commit

プロジェクトが進み始めた後は、パスを指定して新しいファイルを追加できる。

git add hello.py
git commit

上の 2 つのコマンドは、既存ファイルの変更を記録するときにも使用する。つまり Git は、新しいファイルを作成した変更と、すでにリポジトリに保存されているファイル内容の変更を区別しない。