概念理解しようってのがこの記事の目的なんですが、なんか世間に出回ってるGitの説明ってむずかしくないですか?僕の頭なんてメロンパンみたいなのしか入ってないのでもっと簡単に言ってもらわないと困ります(逆切れ)ということで、私がGitで一番大事だとおもうリファレンス(参照)について書いてみようと思います。Gitはリファレンスがわかっていることを前提にした動作をするのが多々あるので、理解しておきましょう。リビジョンとかブランチとかそういった簡単な単語は知ってる前提で進んでいくのでご了承ください。概要リファレンス(ref)とはリビジョンを指し示すものでラベルだとかポインタという言い方のほうがしっくりくるかもしれませんね(ここではリファレンスと言い続けますが)。リファレンスは一つのリビジョンに紐づきます。とったりつけたりは自由自在です。Gitはこのリファレンスから遡れるリビジョンしか見せてくれません。1言い換えるとリファレンスから遡れないリビジョンは存在しても見えません。Gitはこれを利用して(リファレンスを差し替えることで)リビジョンの履歴改変を実現しているんですね(以下イメージ図)。なんらかの操作をして、すでにあったリビジョンが消えたように見えてもガベージコレクションが行われる前であればローカルに残っているので救出できるという訳です。閲覧するコマンドです。何が違うのか見ていきましょう。タグタグは特定リビジョンにつける永続的なリファレンスです。特定のリビジョンに対してリリースバージョン等、目印として利用するのが主目的となります。ブランチバージョン管理システムにはブランチという欠かせない概念があり、もちろんGitにもブランチはあります。Gitは前述したとおりブランチをリファレンスによって表現します。ブランチというと分岐したすべてのリビジョンと捉えがちですが、Gitにおけるブランチはリファレンスがつけられた一点(リビジョン)だけです。一連のリビジョン全てをブランチと指すのは、個人的には変だとは思いませんが人によってはおかしいと思う人がいるかもしれませんね。一つのリビジョンがもつリファレンスの数に制限はないため、一つのリビジョンに複数のブランチが同居するという事態はよく発生します。いずれもリファレンスであることに変わりはありません。手元にクローンしたリポジトリが持つブランチです。Github等のリモートに存在するブランチで手元のコミットグラフには表示されません。これがリモート追跡ブランチです。常にリモートサーバに接続しているわけじゃないので時間の経過とともにどんどんずれていきます。ちなみにリモート追跡ブランチはローカルブランチと同居することが正常な状態といえます。