Git またはその他のバージョン管理システムで作業する場合、「保存」という概念は、ワープロのような従来のファイル編集アプリケーションにおける保存とは微妙に異なるプロセスとなります。従来のソフトウェアにおける「保存」は、Git 用語の「コミット」と同義です。Git では、コミットが「保存」に相当します。従来の保存は、既存のファイルの上書きや新規ファイルの書き込みに使用するファイルシステム操作と考えることができます。一方、Git のコミットは、ファイルやディレクトリのコレクションに対する操作です。

また、Git および SVN における変更の保存は、プロセスが異なります。SVN のコミットである「チェックイン」は、集中管理型サーバーへリモートプッシュを実行します。つまり、SVN のコミットでは、プロジェクトの変更を完全に「保存」するためにインターネットアクセスが必要となります。Git のコミットは、ローカルでキャプチャ、構築してから、必要に応じて git push -u origin master コマンドを使ってリモートサーバーにプッシュすることが可能です。この 2 つの方法の違いは、アーキテクチャ設計の基本的な違いによるものです。Git が分散アプリケーションモデルであるのに対し、SVN は集中管理型モデルです。一般に、分散アプリケーションには集中管理型サーバーのような単一障害点がないため、より信頼性が高くなっています。

Git プロジェクトの現在の状態のスナップショットを保存するには、git addgit statusgit commit の各コマンドをすべて組み合わせて使用します。

Git リポジトリは、特定のファイルやディレクトリを無視するように設定できます。このようにすると、Git は無視されたコンテンツへの変更を保存しません。Git には、無視リストを管理する設定方法が複数用意されています。Git の無視設定の詳細については、git ignore ページを参照してください。

git add

git add は、作業ディレクトリ内の変更をステージングエリアに追加するコマンドです。このコマンドは、個々のファイルのアップデート内容を次回コミット対象とするよう、Git に指示します。ただし、実際には git add コマンドだけではリポジトリに何も影響しません。git commit コマンドを実行するまで、変更が実際に記録されることはありません。

これらのコマンドと関連して、作業ディレクトリおよびステージングエリアの状態を確認するには、git status コマンドを使用します。

仕組み

git add および git commit コマンドは、Git の基本的なワークフローを構成します。すべての Git ユーザーは、所属するチームのコラボレーションモデルがどうであれ、これら 2 つのコマンドを理解しておく必要があります。これらは、プロジェクトのバージョンをリポジトリの履歴に記録する手段です。

git addgit commit 以外に、3 つ目のコマンド git push も完全にコラボレーティブな Git ワークフローには欠かせません。git push を使用すると、コミットされた変更をコラボレーションのためのリモートリポジトリに送信できます。これにより、他のチームメンバーが保存済みの一連の変更にアクセスできるようになります。

Git Tutorial: git add Snapshot

git add コマンドと、ファイルをリポジトリに追加する svn add コマンドを混同しないでください。git add は、変更に対してより抽象的なレベルで機能するコマンドです。つまり、svn add はファイルごとに一度だけ呼び出すコマンドですが、git add はファイルを改変するたびに呼び出す必要があります。これは冗長にも思えますが、このワークフローによってプロジェクトをよく管理された状態に保ちやすくなります。

ステージングエリア

ステージを用いることにより、最後にコミットを行ってから以降のすべての変更を一度にコミットするのではなく、関連性の強い変更のみを区分けし、焦点が明確なスナップショットを作成してから実際のコミットを行うことができます。すなわち、関連性は気にせずに好きなようにファイルに変更を加えた後で関連性の強い変更をまとめてステージに加え、小刻みにコミットを行うことによって、論理的によく整理されたコミットにすることができるのです。他のバージョン管理システムでも同様ですが、プロジェクトの他の部分への影響を最小に抑えつつバグの原因追跡や変更の取り消しが容易にできるように、一回のコミットは小さな規模にすることが重要です。

よく使われるオプション

git add 

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

git add 

に加えられたすべての変更をステージして次回のコミットの対象とします。

git add -p

インタラクティブなステージングセッションを開始します。インタラクティブなステージングセッションでは、ファイルの一部を選択してステージし、次回のコミットの対象とすることができます。このコマンドを実行すると、変更部分が表示され、それに対する次のコマンド入力を要求されます。y を入力するとその部分がステージされ、n を入力するとその部分は無視されます。また、s を入力するとその部分はより小さい部分に分割され、e を入力するとその部分を手作業で編集することが可能となり、q を入力するとインタラクティブなセッションを終了します。

新規プロジェクトを開始する際は、git add コマンドは svn import コマンドと同じ働きをします。カレントディレクトリのコミットを初めて行う場合は次の二つのコマンドを使用します:

git add . git commit

プロジェクトが順調に進み始めた後は、git add にパスを渡すことによって新規ファイルを追加できます。

git add hello.py git commit

上の 2 つのコマンドは、既存ファイルに加えられた変更を記録する場合にも使用します。すなわち、Git は新規ファイルを作成したことによる変更と既にリポジトリに保存されているファイルの内容の変更を区別しません。

概要

Git を学ぶ準備はできていますか?

この対話式のチュートリアルをお試しください。

今すぐ始める