【Git】ブランチ(branch)とは?新規作成や切り替え、merge方法

この記事からわかること
- Gitのブランチ(branch)とは?
- 切り替えと作成方法
- mergeの使い方とコマンドの種類
- コンフリクトの解消方法
index
[open]
\ アプリをリリースしました /
Gitのブランチ(branch)とは?
Gitのブランチ(branch)とはバージョン管理をしながら開発をしていく上での履歴の流れを表した機能です。主軸となるブランチにはあらかじめmasterというブランチ名がつけられており、開発者によって新規のブランチを作成することも可能です。
新規のブランチを作成すると主軸のブランチから枝分かれするようなイメージで繋がりを持っており、主軸と新規のブランチを最終的に併合(merge)させることも可能です。

ブランチは常に1つがアクティブになっており、アクティブになっているブランチ(HEADが指すブランチ)に対してコミットが記録されていきます。
ブランチの使い所
ブランチを枝分かれさせて開発できる使い所は「新規機能を追加したいけどうまくいかなかったらコミット履歴ごと無かったことにしたい」時です。
コミットの履歴はブランチごとに蓄積されていくので、エラー修正したブランチや機能改修したブランチなど目的ごとに分離させることも可能です。
ここからはよく使うブランチを操作するコマンドをまとめていきます。
アクティブになっているブランチを確認する
アクティブになっているgit branch
コマンドを使用します。ブランチには*
が先頭につきます。
-v
でブランチの先端にあるコミットを確認できます。ブランチが複数ある場合でも以下のように全て表示されます。
リモートブランチも含めて確認する
-a
でリモートブランチを含めた全てのブランチを確認できます。
ブランチを作成する
ブランチを作成するにはgit branch
の後に追加したいブランチ名を渡します。
ブランチを切り替える
ブランチを切り替えるにはgit checkout
コマンドを使用します。
これでブランチが切り替わり、切り替わったブランチのHEADのコミットの内容が作業ツリーには表示されます。そのためブランチを切り替える際の注意点として、作業ツリーとステージングが一致している状態(変更がない状態)で行うのが基本です。
ブランチを切り替える時は、コミットしてから切り替えるようにすれば安心かもしれません。
checkoutで新規作成
checkout -b
でブランチを新規作成してそのブランチに切り替えることも可能です。
ブランチを確認する
ブランチが複数に枝分かれしている場合はgit log --all --graph
コマンドを使用することで枝分かれしているコミット履歴をグラフで確認することが可能です。
ブランチをmergeする
枝分かれしていくブランチですが、基本的に主軸となるのはmaster
ブランチであり、他のブランチを最終的にmaster
ブランチへと併合(merge)させます。ブランチ同士をマージする際には新しいコミットが作成されます。

マージするには取り込みたいブランチをアクティブにする必要があるので、master
ブランチがアクティブになっていることを確認します。
続いて併合したいブランチ名をgit merge
コマンドの後に渡して実行します。すると以下のようにコミットメッセージを入力を求められます。デフォルトで「Merge branch 'ブランチ名'」というコメントが入っているのでそのまま実行します。
これで2つのブランチをマージすることができます。ですがこの際に同じファイルの同じ行同士が、別ブランチのコミットで変更されている場合はコンフリクトが発生してしまいます。
おすすめ記事:【Git】コンフリクトとは?解消/中止方法と発生原因
ブランチを削除する
不要になったブランチは-d
または-D
(強制)で削除することができます。その際には削除対象のブランチにHEAD
が載っていない状態で実行します。
もし削除対象ブランチにマージされていないコミットがある場合は、削除は中止されますが、-D
の場合は強制的に削除されてしまうので注意してください。
BLM運動への配慮
GitHubにデフォルトで設定されているブランチ名「master
」が「Black Lives Matter」(BLM)運動への配慮により、主人と奴隷と意味につながる「master/slave」という言葉を極力使わないようにGitHubも2020年にブランチ名を「main」に変更するように動き出しているようです。以下コマンドでデフォルトのブランチ名を変更できます。
実際に練習してみる
では実際にブランチを切り替えて開発する流れを実践してみます。今回は「ROCKFES」というプロジェクトを作成し、その中に「ArtistList.txt」で出演アーティストを管理してみたいと思います。(勝手にアーティストの名前使ってすみません。。)またマージの際にコンフリクトが発生するようにしてみます。
- プロジェクトの作成&Gitの初期化
- ArtistList.txtの作成と編集
- ステージング&コミット
- ArtistList.txtに追記〜コミット
- 主ブランチを進める
- ブランチを切り替える
- pendingブランチを進める
- マージしてみる(コンフリクトの発生)
- コンフリクトを解消する
1.プロジェクトの作成&Gitの初期化
まずはプロジェクトを作成しGitの管理下に置きます。
2.ArtistList.txtの作成と編集
touch
コマンドで「ArtistList.txt」を作成し、中に内容を記述します。
3.ステージング&コミット
ステージングとコミットを行います。
4.ArtistList.txtに追記〜コミット
続いて「ArtistList.txt」を編集し再度、ステージング&コミットしておきます。
5.ブランチの作成
ここで新しいブランチを作成しておきます。ブランチ名は「pending」としておきました。ここでの想定はほぼ確定だけどスケジュール調整待ちみたいな感じです。(この想定がブランチを切り分ける意味)
この状態では2つのブランチが同じコミットを参照しています。
6.主ブランチを進める
ここでさらに出演が確定したアーティストが出たのでmain
ブランチを進めてみます。「3.Saucy Dog」を追記しました。
ステージング&コミットです。
これで今こんな感じです。main
は3つのコミット履歴を持つブランチに、pending
は2つのコミット履歴を持った状態です。

7.ブランチを切り替える
ここでブランチを切り替えてみます。
この状態でワークツリーの「ArtistList.txt」を開いてみると2回目のコミット時の中身(以下のよう)になっています。
8.pendingブランチを進める
ではこの状態で「ArtistList.txt」を編集していきます。
ステージング&コミットです。
ここで一度ブランチとコミットの状況を確認してみます。pending
ブランチが進んで枝分かれしているのが確認できます。
9.マージしてみる(コンフリクトの発生)
ではmain
とpending
をマージしてみます。(Aimerの出演が確定しました)まずはブランチを主軸に切り替えてマージを実行します。
ここで「ArtistList.txt」を開いてみると以下のようにコンフリクトを起こしている箇所が分かるようになっています。コンフリクトがない場合はここで正常に完了し、2つの変更が併合されます。今回は同じ行部分(2.2.My First Storyの下側)を編集していたためコンフリクトが発生しています。
ちなみにこの状態でgit status
をみると以下のような感じです。
10.コンフリクトを解消する
コンフリクトは手動で「ArtistList.txt」を書き換えて解消します。以下のように正しいファイルに書き換えたら、このファイルをステージングします。
これでコンフリクトが解消され2つのブランチをマージすることができました。最後に変更をコミットして完了です。
おすすめ記事:【Git】ローカルとリモートのブランチ名を変更する方法!
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。