はじめに
Gitを活用して開発を進めていく上で、ブランチ機能は欠かせません。ブランチ機能を活用することで、1つのプロジェクトを独立した環境で並行して進めて行くことが出来ます。また、ブランチの理解が深まることでGitコマンドが理解しやすくなったりもします。と言っても自分はまだまだ使いこなせていないのですが、今回はブランチについて調べて分かったことを紹介していきたいと思います。
Git
ブランチの説明に入る前に、まずはGitの説明からしていきたいと思います。
バージョン管理
Gitとは、ファイルの変更履歴を記録し追跡するためのバージョン管理システムのことです。ファイル変更をGitに登録する際に、ファイル変更が記録され、コミットというものが作成されます。コミットは、その直前のコミット(親コミット)を記録しているので、過去のコミットを辿ることが出来ます。コミットとバージョンは対応していて、コミットが持つコミットID(※1)を指定することでバージョンをします。
※1 実際のコミットIDは40桁のランダムな英数字ですが、ここではコミットの流れが分かりやすくするためにa1のように書いています。
バージョンの切り替え
git checkout コミットID
で、バージョンを切り替えることができます(git log
で過去のバージョンのコミットIDを確認できます)。先ほど、コミットIDを指定することでバージョンを切り替えると説明しましたが、より正確には、HEAD(※2)が参照するコミットを切り替えることで、バージョンを切り替えています。なので実際には、git checkout コミットID
で、HEADが参照するコミットを切り替えていて、その結果、バージョンが切り替わっています。
※2 HEAD:現在自分が作業しているバージョンのコミットを指すポインタのこと。逆に、HEADが参照しているコミットのバージョンに移動しているとも言えます。
ブランチ機能
ブランチ機能とは、コミット履歴を分岐して記録していく機能のことです。コミット履歴を分岐させると、他の分岐先で新しくコミットがあったとしても影響を受けません。下図のような場合を考えてみましょう。赤枠内のコミットは、青枠や緑枠の分岐したコミット履歴には影響がありません。コミット履歴に影響がないということは、バージョンにも影響がないということです。よって、タスクごとにコミット履歴を分岐させて作業することで、独立した環境でそれぞれのタスクを進めることができるのです。
ブランチ
ブランチとは
ブランチ機能について説明しましたが、ブランチとは何を指している言葉なのでしょうか?英単語”branch”は「枝、枝分かれ(分岐)したもの」などの意味があります。分岐した各コミット履歴のことをブランチと言ったりもしますが、ブランチの実体としては、コミット履歴全体を指しているのではなく、コミット履歴の最新コミットを指すポインタに過ぎません。なので、コミットが更新されると、ブランチのポインタも最新のコミットに切り替わります(※3)。
※3 Gitリポジトリを新規作成すると同時に生成される一番最初のブランチは、デフォルトでmasterやmainというブランチ名が付いています(2020年10月以降に新規作成されたリポジトリの場合はmain、それ以前はmaster)
ブランチとHEAD
実際には、git checkout ブランチ名
のようにブランチ指定で移動することが多く、その場合、HEADのポインタはブランチを指しています。この時、HEADはそのブランチが参照しているコミットを間接的に参照している状態になっています。なので、そのブランチで新しいコミットがあると、ブランチの参照先が切り替わり、同時にHEADの参照先も同時に切り替わります。
↓コミット後(branchAとともにHEADの参照先も移動している)
ブランチの作成
git branch ブランチ名
や git checkout -b ブランチ名
で、ブランチを新たに生成することができます。git checkout -b ブランチ名
は、git branch ブランチ名
と git checkout ブランチ名
を一度に実行できる便利なコマンドで、ブランチを新たに生成して、そのブランチで作業していきたいという場合に便利です。
おわりに
今回は、Gitのブランチ機能について説明しました。
Gitを理解して、より快適に開発していきたいですね。