Git ワークスペース、ステージング領域、リポジトリ
基本概念
まず、Git ワークスペース、ステージングエリア、リポジトリの概念を理解しましょう
ワークスペース: は、コンピューター上で表示されるディレクトリです。
一時記憶領域:英語ではステージ、インデックスといいます。通常は「gitディレクトリ」配下のインデックスファイル(.git/index)に保存されるため、一時保存領域のことをインデックス(インデックス)と呼ぶこともあります。
リポジトリ: ワークスペースには隠しディレクトリ .git があります。これはワークスペースではなく、Git リポジトリです。
次の図は、ワークスペース、リポジトリ内のステージング領域、およびリポジトリの関係を示しています。
図の左側はワークスペース、右側はリポジトリです。リポジトリ内の「インデックス」とマークされた領域はステージング領域 (ステージ、インデックス) であり、「マスター」とマークされた領域はマスター ブランチで表されるディレクトリ ツリーです。
この図では、「HEAD」が実際にはマスターブランチを指す「カーソル」であることがわかります。したがって、図に示すコマンド内で HEAD が出現する箇所は、master に置き換えることができます。
写真内のオブジェクトで識別される領域は Git のオブジェクト ライブラリで、実際には ".git/objects" ディレクトリにあり、作成されたさまざまなオブジェクトやコンテンツが含まれています。
ワークスペースで変更(または追加)されたファイルに対して「git add」コマンドを実行すると、ステージング領域のディレクトリツリーが更新され、ワークスペースで変更(または追加)されたファイルの内容が書き込まれます。オブジェクト ライブラリに新しいオブジェクトが作成され、オブジェクトの ID が一時記憶領域のファイル インデックスに記録されます。
コミット操作 (git commit) を実行すると、ステージング領域のディレクトリ ツリーがバージョン ライブラリ (オブジェクト ライブラリ) に書き込まれ、それに応じて master ブランチが更新されます。つまり、master が指すディレクトリツリーは、サブミット時の一時記憶領域のディレクトリツリーになります。
「git replace HEAD」コマンドを実行すると、ステージング領域のディレクトリツリーが書き換えられ、masterブランチが指すディレクトリツリーに置き換えられますが、ワークスペースには影響ありません。
「git rm --cached <file>」コマンドを実行すると、ファイルはステージング領域から直接削除され、ワークスペースは変更されません。
「git checkout .」または「git checkout -- <file>」コマンドを実行すると、ワークスペース内のファイルがステージング領域内のすべてまたは指定されたファイルに置き換えられます。この操作は危険であり、ステージング領域に追加されていないワークスペース内の変更が消去されます。
「git checkout HEAD .」または「git checkout HEAD <file>」コマンドが実行されると、HEAD が指すマスター ブランチ内のファイルのすべてまたは一部がステージング領域内のファイルを置き換えます。ワークスペース。このコマンドは、ワークスペース内のコミットされていない変更をクリアするだけでなく、ステージング領域内のコミットされていない変更もクリアするため、非常に危険です。