日々之迷歩

世の中わからんことだらけ

ITが複雑で難しくなっていく様に翻弄される日々です。微力ながら共著させていただいた「シェル・ワンライナー160本ノック」をよろしくお願い申し上げます。

リポジトリとインデックスとワークツリー

WEB+DB PRESS vol.50の「はじめてのGit」を読んでいる。Gitを理解するうえで、リポジトリ、インデックス、ワークツリー(作業ファイル群)の関係を把握しておくことが重要みたいだ。

addとcommitの意味

リポジトリ インデックス←ワークツリー

ワークツリーの内容をインデックスに登録する

$ git add app/views/layouts/application.html.erb
リポジトリ←インデックス ワークツリー

インデックスの内容をリポジトリに登録する。

$ git commit

checkoutの使い方

gitで復活の呪文はcheckoutだと理解していたのだが、これは作業ファイルをリポジトリの内容ではなくインデックスの状態に戻すということだ。
checkoutは指定されたファイルをインデックスに記録されている状態から復帰するという意味だ。Gitでは「現時点での最新のコミット」をHEADと呼ぶ。HEADを指定すると、最新のコミットされた内容(最新のリポジトリ)に復帰する。

リポジトリ インデックス→ワークツリー

インデックスの内容をワークツリーに復帰する場合。

$ git checkout app/views/layouts/application.html.erb
リポジトリ→→→→→→→→ワークツリー

インデックスを飛び越えて、リポジトリの内容をワークツリーに復帰する場合。

$ git checkout HEAD app/views/layouts/application.html.erb

diffの使い方

リポジトリ インデックス<<>>ワークツリー

インデックスとワークツリー間の差分

$ git diff app/views/layouts/application.html.erb
リポジトリ<<>>インデックス ワークツリー

リポジトリとインデックス間の差分

$ git diff --cached app/views/layouts/application.html.erb
リポジトリ<<<<<<<<<>>>>>>>>>>ワークツリー

インデックスを飛び越えて、リポジトリとワークツリー間の差分

$ git diff HEAD app/views/layouts/application.html.erb

WEB+DB PRESS Vol.50

WEB+DB PRESS Vol.50