Gitのブランチについて初心者の自分がまとめたことを紹介しています。
ブランチとマージは複数人で開発をするときに必要な仕組みです。
この2つの仕組みを理解しておけば、開発がよりスムーズに行うことができます。
目次
ブランチとは?
ブランチとは分岐をして開発を行う仕組みです。
自分はヘッダーの開発、別の人がレコメンドの開発をしていたとき、他の人が変更した内容を自分が開発中に影響を受けないようにするために分岐をさせます。
ブランチはコミットを指したポインタのことで、自分が作業しているブランチを指しているのが「HEAD」になります。
今「master」ブランチで作業しているとしたら、「HEAD」が指しているのが「master」ということになります。
コミットしたらブランチが指すコミットファイルが変わり「HEAD」も変わります。
ブランチで使用するコマンド
新規追加
git branch <ブランチ名>
ブランチの作成だけで、ブランチの切り替えは別のコマンド。
一覧を表示する
git branch
すべてのブランチを表示するときはオプション「-a」をつけます。
git branch -a
ブランチを切り替える
git checkout <既存ブランチ名>
ブランチの作成と切り替えを同時に行う場合は、オプション「-b」をつけます。
git checkout -b <新ブランチ名>
ブランチ名を変更する
git branch -m <ブランチ名>
このコマンドを入力すると、自分が今いるブランチの名前が変更されます。
ブランチを切り替える
git branch -d <ブランチ名>
masterにマージされていない変更がある場合は、このコマンドを入力しても削除されません。
強制的に削除するにはオプションを「-D」にします。
git branch -D <ブランチ名>
強制削除は必要のないブランチのときに使用します。
マージとは?
マージとは他の人が開発した変更内容を取り込む作業のことです。
マージには3種類の取り込みがあります。
- Fast Foward
- Auto Merge
- Conflict
Fast Fowardは、早送りになるマージのことで、ブランチが枝分かれしていなかったときに発生します。
エラーが発生してエラーの処理を行ってコミットした場合、このエラー処理をマージします。
これは枝分かれせずにポインタが1つ前に進んだだけというマージになります。
Auto Mergeは、基本的なマージのことで、枝分かれして開発した場合、それをマージするマージコミットという新しいコミットを作るということになります。
マージコミットは通常1つの親ファイルしかないものが、マージしたコミット分の親ファイルを持ちます。
Conflict(コンフリクト)とは、同じファイルの同じ行に対して異なる編集を行ったとき、どの変更を残せばいいかわからない状態のことです。
コンフリクトが発生しているファイルを確認するには「git status」を入力します。
「both modify」と表示されているのがコンフリクトしているファイルです。
コンフリクトが発生した場合、発生したファイルに下記のような内容が表示されます。
<<<<<HEAD
変更内容
=======
変更内容
>>>>><ブランチ名>
最初の変更内容はHEADに書かれていた内容、後ろの変更内容はマージしようとしたブランチに書かれていた内容になります。
コンフリクトの解決方法は、コンフリクトしているファイルを正しい修正内容に変更し、<<<<<HEAD=======>>>>><ブランチ名>の記述を削除します。
その後はいつも通り、add->commitすれば大丈夫です。
マージで使用するコマンド
マージする
git merge <ブランチ名>
マージするときは、マージの元になるブランチに移動します。
<ブランチ名>にはマージするブランチ名を入力します。
例えば、masterブランチにfeatureブランチをマージしたい場合は
git merge feature
と入力します。
マージコマンドを入力後、コミットメッセージを入力したらマージが完了します。
マージできたかは「git log」で確認できます。
まとめ
Gitのブランチとマージについて仕組みとコマンドをまとめました。
ブランチは開発をする上でなくてはならない仕組みです。
masterブランチはリリース用、開発は別のブランチで行う、というようにすればmasterブランチは常に最新の状態を保つことができます。
またマージした場合にエラーやバグが見つかっても1つ前に戻すことが簡単です。
私自身もブランチという概念を知らなかったのですが、この仕組を使えば、より開発がスムーズにできるということがわかりました。