履歴管理の概念
ブランチの作成と切り替え方法を理解したところで、少し概念的な説明をします。
Gitの履歴は、コミットごとにコミットオブジェクト(*1)を作成し管理しています。またコミットオブジェクトは、直前のコミットオブジェクトへの参照を持っています(図2)。
例えばローカルリポジトリに、C1,C2,C3と3回コミットしたとしましょう。このとき、3回目のコミット内容であるC3は、直前のコミットであるC2を、C2はC1をと言ったようにグラフ構造で表すことができます。このように、Gitのコミットオブジェクトはすべての祖先をたどることができるように管理されています。
さて、先ほどの操作を図示していましょう。①は、bugfixブランチを作成する前の状態です。
ブランチとはコミットオブジェクトへのポインタに過ぎません。そして、前回も説明しましたが、HEADとは現在のブランチの最新コミットを表すポインタです。
②は、bugfixブランチを作成した状態です。bugfixブランチの作成直後は、masterと同じくC3をポイントしています。そしてブランチを切り替えると、③のようにHEADが指す先が切り替わります。
GUIからブランチの作成と切り替えを行う
これらのブランチの作成、切り替えを操作をGUIで行ってみましょう。Git ExtensionsのGitブラウザを起動します。履歴ペインを見ると3回修正が行われており、最新の修正にmasterとマークされているが確認できます(図6左)。
コンテキストメニューから[ブランチの作成]を選択します。ブランチの作成ダイアログが表示されます。新しいブランチ名を入力し、[作成]ボタンをクリックすれば完了です。
作成直後に切り替えは、先ほど説明したcheckoutコマンドの-bオプションに相当する動作です。既定では、[作成後に切替]がオンとなっていますが、ここでは操作説明のためオフにして進めます。
ブランチを切り替えるには、[Git]-[ブランチの切り替え]を選択します。[ブランチの切り替え]ダイアログが表示されるので、プルダウンリストからbugfixブランチを選択し、[切り替え]ボタンをクリックします。
ブランチの作成、切り替えが完了すると図6右のとおりbugfixブランチが作成されていることが確認できるでしょう。ブランチ名の横三角印は、現在のブランチを示しており、ブランチが切り替わったことも確認できます。履歴左の線の部分は、先ほど説明した概念図を表しています。この時点では一直線ですが、ブランチの作成とマージなどを繰り返すと複雑になってきます。

