What is it, naokirin?

Gitの基礎知識 コマンド以外に知っておくべきこと

Gitにはコマンド操作をする際に知っておくべきことが数多くあります。

そのうちでも最低限知っておくべきことを書いてみることにしました。
Gitを使いこなすにはもっともっと必要な知識は数多くあります。
もっと知りたい方はいろいろと調べてみることをお勧めします。

HEAD、インデックス、ワーキングツリー

HEAD

現在のブランチへのポインタとして存在するものです。

インデックス

次回コミット時に記録する変更を持っています。
つまり通常、コミットする場合はこのインデックスに記録されている状態・変更がコミットで記録されることになります。

ワーキングツリーから次回コミットで記録する変更をインデックスに記録するときには git add を使います。

ワーキングツリー*1

ワーキングツリーはリポジトリ下のディレクトリ領域とファイルのことです。

コミットの指定方法

コマンドでは、よくコミットを指定する場合があります。
その際にはコミットに与えられたSHA-1ハッシュを指定(識別できるなら最初の数文字でも可)することで行うことができますが、面倒な場合もあります。

そういう際にはまず、現在のコミットを指すHEADを用いることができます。
さらにGitにはHEADから相対的な位置にあるコミットを簡単に参照できるような機能があります。

コミットの相対的な指定

Gitではコマンドでコミットを指定する際に、HEADから相対的な位置のコミットを指定することができるようになっています。

たとえば

HEAD^

は、HEADの1つ前のコミットを

HEAD^^

は、HEADの2つ前のコミットを指します。
^ をつけるごとに、1つずつ前にさかのぼっていきます。

しかしながら、あまりさかのぼる量が多くなってしまうと

HEAD^^^^^^^^

などとなって、いくつ前のコミットに戻るか分からなくなります。

そこで

HEAD~8

で、HEADから8つ前のコミットを指します。


HEADを移動させていると、元のHEADの位置に戻りたいときもあります。
そういう時は

git reflog

で表示される

HEAD@{数字}

を使うことで、昔のHEADの位置に戻ることができます。

タグ、ブランチによる指定

コミットの指定にはタグやブランチも使うことができます。

特定のファイルを無視する

ワーキングツリーにある「.gitignore」というファイルに記述することで管理しないファイルを指定することができます。

まずワーキングツリーに「.gitignore」というファイルを作ります。

つぎに管理したくないファイルを(ワイルドカードなども使って)「.gitignore」ファイル内に記述します。
たとえば、拡張子が「.tmp」のファイルを全て管理しないようにするには

*.tmp

と書くことでできるようになります。

また、「bin」ディレクトリ下全てのファイルを管理しない場合は

bin/

でできます。

さらに「.tmp」の拡張子が付いたもののうち、「abc.tmp」のみは管理したい場合は

*.tmp
!abc.tmp

と「!」を前につけて、指定することで管理できるようになります。

*1:ワークツリーとワーキングツリーのどちらもあるみたいですが、同じ意味で使われているようです。