Git のステージング エリア

Azhar Bashir Khan 2023年6月20日
Git のステージング エリア

このチュートリアルでは、Git のステージング領域について学習します。

バージョン管理システムである Git は、プロジェクト ディレクトリに対して行われた変更の履歴を保持します。 Git はコミットを使用して変更を追跡します。

Git には 3つの内部管理システムがあり、そのうちの 1つがステージング領域です。 ステージング領域は、次のコミットで保存したいファイルのバージョンを追加できるラフ ドラフト スペースのようなものです。

git add コマンドを使用して、ファイルをステージング領域に追加します。 これを例で説明します。

Git のステージング エリア

Git は共同開発環境で使用され、プロジェクト ディレクトリ内のファイルに加えられた変更を追跡します。

Git には、ツリーとも呼ばれる 3つの内部管理システムがあります。作業ディレクトリ ツリー、ステージング インデックス ツリー、コミット履歴ツリーです。

これらのツリーは、Git リポジトリ内のファイルの状態とその変更を管理するために使用される複雑なデータ構造です。 ステージング インデックス ツリーとも呼ばれるステージング領域は、作業ディレクトリの変更を追跡します。

コマンド git add を使用して、ファイルのバージョンを作業ディレクトリからステージング領域にコピーします。 git add コマンドは、作業ツリーで見つかった現在のコンテンツを使用して、インデックスまたはステージング領域を更新します。

ステージング領域には、作業ツリーのコンテンツのスナップショットが保持されます。 このスナップショットは、次のコミットの内容として取得されるものです。

後で、変更を Git リポジトリにコミットする場合は、git commit コマンドを使用する必要があります。

git commit コマンドは、git add コマンドによって作成されたスナップショットを使用して、コミット履歴ツリーにコミットを作成します。 git commit コマンドは、コミット履歴ツリーにある永続的なスナップショットに変更を追加します。

ステージング領域は、複雑な内部キャッシング メカニズムです。 git ls-files コマンドを使用して、ステージング領域またはインデックスの状態を表示できます。

Git リポジトリで git ls-files コマンドを実行できます。

$ git ls-files -s .
100644 bab2a0adb8921f504cb0521bc00b8dde22ee92a4 0	mynotes.txt

mynotes.txt ファイルがステージング エリア ツリーの一部であることがわかります。

git ls-files コマンドに提供される -s または --stage オプションは、ステージング インデックス内のファイルの追加のメタデータを表示します。 メタデータは、ステージングされたコンテンツのモード ビット、オブジェクト名、およびステージ番号です。

2 番目の値 bab2a0adb8921f504cb0521bc00b8dde22ee92a4 は、標準の Git オブジェクト SHA-1 ハッシュです。 これは、ファイルのコンテンツのハッシュです。

git add コマンドを使用して、mynotes.txt ファイルの変更をステージング領域に追加できます。

$ git add mynotes.txt
$ git status
On branch main Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: mynotes.txt

git status コマンドの出力に示されているように、ファイル mynotes.txt への変更は、git add コマンドによってステージング インデックスに昇格されます。

次のように、mynotes.txt ファイルのステージング領域またはインデックスのステータスを再度確認します。

$ git ls-files -s mynotes.txt
100644 067478ae06e267263ea7ed849ef358f911628668 0	mynotes.txt

mynotes.txt ファイルのオブジェクト SHAbab2a0adb8921f504cb0521bc00b8dde22ee92a4 から 067478ae06e267263ea7ed849ef358f911628668 に更新されていることがわかります。

これで、Git のステージング エリア ツリーまたはインデックスについて学習しました。

詳細については、以下をご覧ください。

  1. git-add
  2. 変更の保存

関連記事 - Git Add