git-flowの基礎のき / branchをどこでどう切ってどうするの?!【day130】

Git

今日は、git-flowの基礎のき / branchをどこでどう切ってどうするの?!についてアウトプットします。

こんにちは。駆け出しコーダーのharuです。

*わたしについて*
2歳0歳の育児をしながら、22時〜2時にプログラミングを独学しています。
2020.5.11~学習スタート
2020.8.10~実務でコーディングしています
まだHTML/CSS(SCSS)/jQuery のよわよわです。これからもっと知識をつけていきたく、インプット・アウトプットを続けています。

普段から学習していてわかったことや、気付きをログに残しています。
※認識の間違っている箇所があれば、ご教授いただけるとうれしいです!

git-flowの基礎のき / branchをどこでどう切ってどうするの?!

何を見ても理解できなかったgit-flowの基本のきをもりけん先生(@terrace_tec)に教えていただいたのでアウトプットします。

・git-flowって何?
・どのbranchをどこで切るの?
・branchの名前、どうしたらいいの?
・どこで何をしてどうなるの(´;ω;`)ハテナ

となっていた過去のわたしに向けて書きます。

git-flowって何?

git-flowとは、branchの管理方法のモデル・ツールのことです (どちらも指す)

Vincent Driessenさんが考案したもので、元記事 “A successful Git branching model” を翻訳したものを発見しました。ありがたい。今回のブログは、こちらも参考にさせていただきました。

git-flowで管理すると、複数の人と開発を進める時に、branchを誰がみてもわかりやすい状態に保つことができるので便利です。

<!– メモ –>
そもそものgit/ GitHubについては、いくつかアウトプットをしているので、よろしければどうぞ!

git-flowのbranchの種類

わかりやすい git-flowのイメージ図を拝借しました(敬礼)


(引用:【図解】git-flow、GitHub Flowを開発現場で使い始めるためにこれだけは覚えておこう)

このように、複数のbranchを切って、開発〜テスト〜リリースまでを進めていきます。

branchの種類について軽くまとめます。

メインブランチ

メインブランチは、「master」「develop」の2つです。

  • master: 【大元】リリースする完成ソースを管理
  • develop: 【開発中の大元】開発中の最新のソースを管理

developに集まる開発ソースが安定してリリースできる状態になったら、masterブランチにマージします。

 

わたしは、何のモデルにも添わずにGitHubを使用していたので、毎度最新のcommitをmasterにマージしていました。git-flowに従うと、masterにマージするのは完成物としてリリースする本当に最後のときだけということになります。

サポートブランチ

サポートブランチは、「feature」「release」「hot-fix」の3つです。

  • feature:実際に実装をしていく時に使うブランチ
  • release:実装がおわったものをテストサーバーで実際にテストするブランチ
  • hot-fix:masterソースに見つかったバグを早急に修正するブランチ

なので、普段実装をしていく時に使うのはfeatureブランチです。ここで、機能ごとにfeatureブランチを切って、実装が終わったらdevelopにマージします。

git-flowの流れ

流れを簡単に説明します。図を再掲します。


(引用:【図解】git-flow、GitHub Flowを開発現場で使い始めるためにこれだけは覚えておこう)

masterからdevelopを作成する

git checkout master
git checkout -b develop

developを作るのは、プロジェクトがはじまった最初だけです。

developからfeatureを作成する

次に、カレントディレクトリがdevelopの状態で、featureブランチを切ります。

git checkout develop
git checkout -b feature(-機能名など)

featureブランチの命名に関しては、調べたところさまざまな意見がありました。特に必ずこれというものはないようです。

  • feature-機能名/*
  • feature/yyyymm-機能名/*
  • feature/yyyymm-{案件名}/*
  • feature/yyyymm-{案件名}/{issue番号}/*

など。

featureで開発しているものは、ローカルにのみcommitします。
※しかし、featureはdevelopにマージすると消すことが多いため、それならpushしても別にいいのでは?という意見もありました。→こちら

featureで機能が完成したらdevelopにマージする

git checkout develop
git merge --no-ff feature名
git branch -d feature名
git push origin develop

–no-ffを使うことで、開発に使ったコミットをひとまとめにしてマージすることができます。

developからreleaseブランチを切る

git checkout develop 
git checkout -b release-1.0

releaseでは、テスト環境でのテストや、この後のリリースのためのバージョン設定も行います。

※branch名は、release-x.xのように バージョンを入れることが多い。

releaseブランチからmasterとdevelopにマージ

masterにマージさせることで、リリース済みとなる。

git checkout master
git merge --no-ff release-1.0
git tag -a 1.0

※developブランチでもreleaseをマージする。=developは常に開発中の最新のコードを保管する場所だから

git checkout develop
git merge --no-ff release-1.0

リリース後にバグが発見されたら、hot-fixブランチを切って対応する

git checkout -b hotfix-1.1 master

・ver.を1つ増やす
・バグ修正後に1つ以上のコミットを行う
・その後にhot-fixブランチを終了させる

git checkout master
git merge --no-ff hotfix-1.1
git tag -a 1.1

・最後に、developにもマージさせて終了

git checkout develop
git merge --no-ff hotfix-1.1

 

なぜ、リリース後のバグ修正はhot-fixブランチで行われるのか?developではダメなのか?

→developで作業している人がその作業をしながら、別の人が素早いバグの修正を並行して進めることができるから

 

あとがき

まだまだ軽い内容ではありますが、Git-flowの仕組みを知ることができました。

Thanks:師匠「もりけんさん」(@terrace_tec)

もりけんさんのHPはこちら