未来を変える日記

ETロボコンを目指して

Git & Git Hub (4) ローカル側リポジトリの構成を理解する

 前回は作成途中や分岐先のバージョンに移動する Checkout や分岐版を作成する ブランチ操作を行いました。
 続いて、リモートレポジトリとの連携を記載した所ですが、今回は、その前段階の準備としてローカル側のリポジトリの構成を理解します。

作業履歴の確認

 先ず、ブログ記事用に作成したローカル側のレポジトリ Test-Project。前回の記事から少し変更していますが、次のような作業履歴であると仮定して話を進めます。

f:id:corgi-eric:20201212115825p:plain

 初期化後、Commit1.txt ~ Commit4.txt のファイルを作成し、その都度コミット。但し、Commit3作成後に、Commit2に戻り(Checkout)、Commit4を実施し、switch -c にてBranch1を作成。
 その後に、Commit 5.txtを作成したという内容。

構成イメージ

 作業履歴をローカル側レポジトリの構成イメージに置き換えます。

f:id:corgi-eric:20201212120959p:plain

 Working Area, Staging Area, Local Repositoryの3領域から構成されます。以下の3点に気が付くと思います。

  1. Commit1, 2, 4.txtはWork AreaとStaging Areaにある
  2. Commit3.txt は所在が見えない
  3. Commit5.txt はWork Areaにのみある

Work Area, Staging Areaとは?

 上の箇条書き1番目で、Commit1, 2, 4.txtはWork AreaとStaging Areaにあると書きました。

 先ず、Work Areaは、test-projectのフォルダ下で、コードを書く所です。
f:id:corgi-eric:20201212121710p:plain

 Staging Areaは、Commitするファイルを置いておくエリア。ls-files コマンドで中身を確認できます。

f:id:corgi-eric:20201212121850p:plain

 Staging AreaにあるのはCommit1, 2, 4.txtで、Work AreaにあるCommit5.txtは無く、上の構成イメージと一致していることがわかります。

Commit3.txtはどこに?

 今は、Branch1にいますが、Commit3.txtはMasterブランチ側で作成したファイルです。従って、Masterブランチに切り替えてやれば復活します。

git switch master

 Masterに切り替えた後、logとstaging areaを確認してみました。Commit3.txtが復活しています。逆にBranch1のCommit4, 5.txtは消えました。

f:id:corgi-eric:20201212123404p:plain

Commit5.txtの状態は?

 上でMasterブランチに切り替えましたが、Commit5.txtは、Staging Areaに乗せていないので、ブランチは関係ありません。引き続きWork Areaで確認することができます。

f:id:corgi-eric:20201212123757p:plain

 ここで、次のコマンドを打ちます。

git status

f:id:corgi-eric:20201212122151p:plain

 Commit5.txt が Untracked file であると警告されました。つまりStaging Areaに乗っていないということです。
 なお、Staging Areaに乗せてやるには、次のいずれかのコマンドを使います。「.」とした場合、Work Areaの全ファイルをStaging Areaに送ることができます。

git add Commit5.txt
git add .

構成イメージと操作のまとめ

 Local Repositoryは、Work Area, Staging Areaから構成されてます。Addコマンドで、Work AreaのファイルをStaging Areaに乗せ、CommitでLocal Repositoryへと作業来歴を記録させます。
 その後は、Checkout で特定のCommit まで作業を戻したり、Switchでブランチを切り替えることができます。

f:id:corgi-eric:20201212125544p:plain

 今回はここまでとします。次回はリモートレポジトリ(Git Hub)側との連携を行います。