これは初心者向けのGit入門の記事です。ただし、具体的な手順を示したチュートリアルではなく、少し概念的な解説です。
今回は「Gitを学ぶときに必ずやってほしいこと」を解説します。
Gitを学ぶときに必ずやってほしいこと
Gitを学ぶときに必ずやってほしいこと。それは 「GUIツールでコミットグラフを確認する」 です。
GUIツールはなんでも構いません。Git公式の git-gui や gitk でもよいですし、コミットグラフの表示が可能なIDE付属のGitインターフェースでもよいです。
コミットグラフとは?
コミットグラフとは次のようなコミット同士のつながりのことです。次の画像は gitk の画面の一部です。
丸がコミットを表しています。黄色い丸は現在作業スペースに展開中のコミットで、それ以外のコミットは青い丸です。
コミット同士をつなぐカラフルな線はコミットの親子関係のつながりを表しています。コミットは gitk においては上に行くほど子孫、下に行くほど祖先といった具合に並んでいます。
緑の四角はブランチ(ブランチヘッド)を表しています。Gitにおいてブランチとは永続的にコミットが所属する名前のついた枝が存在するわけではなく、実は図のようにコミットにつけられた単なるラベルです。ブランチをチェックアウトしてコミットするとそのラベルがついた場所に新しいコミットが作られていき、結果として枝が構成されます。このラベルは構成される枝の先頭を指し示すと考えることができるので「ブランチヘッド」と呼ばれます。
GUIツールでコミットグラフを確認する理由
私の理解では、バージョン管理はGitに限らず本質的にコミットグラフを操作することと等しいです。コミットグラフを確認することで、管理しているバージョンの状態が想定通りであることを視覚的に確認することができます。
Gitは多数のサブコマンドやオプションがあり、習得には大変な困難が伴うツールと思われていますが、実はGitを「コミットグラフを操作するツール」と捉えると各コマンドをシンプルに理解することができるようになります。
例えば次のような感じです:
-
git branch <ブランチ名>
- ブランチヘッド(ラベル)を新しく作る
-
git commit
- チェックアウト中のブランチヘッドが指すコミットを親コミットとして子コミットを新しく作り、ブランチヘッドをその子コミットへ移す
-
git merge
- 基本的に
git commit
と同じだが、複数の親を持つ子コミットを作る
- 基本的に
-
git checkout
- 指定したコミットを現在の作業スペースに展開する
-
git reset
- 現在のブランチヘッドを指定されたコミットに付け替える
-
git rebase
- 指定した分岐前の場所から現在のブランチヘッドまでの一連のコミットを別の場所へ移植する
-
git fetch
- リモート追跡ブランチ(
git branch -r
で確認できるやつです)の各ブランチヘッドを最新のリモートリポジトリ(originとか)の状況にあわせて付け替える
- リモート追跡ブランチ(
これらのサブコマンドはコミットグラフおよびそこにつけられたブランチヘッド(ラベル)を操作するサブコマンドです。これらの操作を行う前後でかならずコミットグラフを確認するようにしてください。それにより、操作とコミットグラフの関係性をより正確に理解することができ、結果として Git やバージョン管理の深い理解に繋がります。
例外
git log
のようなリードオンリーの操作や、 git add
のようなステージングエリアを操作するコマンドはコミットグラフに影響を与えないので、操作の都度コミットグラフを確認する必要はありません。
まとめ
Git を学ぶときに各種操作の前後で GUIツールでコミットグラフを確認する ようにすると、Gitをより深く理解できるようになります。