以下の記事や動画を参考に、Git-flowの使い方をハンズオンしましたので、備忘録として残します。
【参考記事】
【関連記事】
- 【Git第1回】使う理由・歴史・特徴・インストール
- 【Git第2回】サンプルコード作成からローカルリポジトリにコミットするまで
- 【Git第3回】Gitの各種コマンドの使い方(変更・削除・gitignore・変更の戻し)
- 【Git第4回】GitHub(リモートリポジトリ)とのやり取り
- 【Git第5回】ブランチ・マージ・コンフリクト発生時の対応/ハンズオン
- 【Git第6回】GitHubを利用した開発手順の流れ
- 【Git第7回】Git-flowのインストールから使ってみるまで/ハンズオン
Git-flowの概要
- git-flowは、Gitを使った効率的なソフトウェア開発プロセスを提供するブランチモデル
- Vincent Driessenによって提案され、大規模なチームでの開発に適している
- このモデルは、主に5つのブランチで構成されている
- 以下のようなブランチ構成を採用することで、機能追加や修正、リリースなどの各作業を明確に区分けし、協調作業を効率的に進めることができる
5つのブランチ
Master | ・最新のリリースされたコードが格納されるブランチ ・安定したコードのみがマージされる |
Develop | ・主要な開発作業が行われるブランチ ・次のリリースのための機能や修正がマージされる |
Feature | ・新機能の開発を行うためのブランチ ・Developブランチから派生する ・フィーチャーが完成したら、Developブランチにマージされる |
Release | ・次のリリースの準備が整った段階でDevelopブランチから派生する ・テストやQA、リリースノートの作成などが行われる ・問題がなければ、Masterブランチにマージされる |
Hotfix | ・Masterブランチで発生した重大なバグの修正のためのブランチ ・Masterブランチから派生 ・修正が完了したら、MasterブランチとDevelopブランチの両方にマージされる |
A successful Git Branching model
引用元:A successful Git branching model
事前準備
作業の前提
- GitがローカルPCにインストール済み
- リモートリポジトリに何かプロダクトを作っておく
- branchはmasterブランチ
- 動きの検証なのでなんでもいいのだが、今回はmasterブランチの「README.md」に追記してみる
- git statusコマンドでクリーンな状態(リモートとローカルで差分がない状態)でハンズオンスタート
今回修正する項目
作業前のREADME.md
for development private repo
https://github.com/conti0513?tab=repositories
# DIR
development_private
├──DIR1
├──DIR2
├──DIR3
├──.gitignore
├──.git
作業後のREADME.md
for development private repo
https://github.com/conti0513?tab=repositories
# DIR
development_private
├──DIR1
├──DIR2
├──DIR3
├──DIR4 # ここを追記
├──.gitignore
├──.git
GIt-flowを初期化
Git-flowをインストール
# ディレクトリの移動
cd <作業ディレクトリ>
# Git-flowをインストール
$ brew install git-flow
# インストール後の確認
$ git flow version
0.4.1
develop branchを作る
初回の作業
# develop branchを作成
$ git checkout -b develop
$ git flow init -d
$ git branch
# result
* develop
master
tutorial
# GitHubにプッシュ
$ git push origin develop
# result
* [new branch] develop -> develop
2回目以降
# developブランチに移動 $ git checkout develop # result Switched to branch 'develop' # 確認 $ git branch # result * develop master
feature branchで機能開発
# 書式
git flow feature start <feature-branch-name>
# ex)
$ git flow feature start change_readme
# 確認
# 「feature/change_readme」が作成されていることを確認
$ git branch
develop
* feature/change_readme
master
新しい機能を追加
- ex) DIR4を作成し、README.mdを以下のように修正
- 作業後のREADME.mdは以下の通り
for development private repo
https://github.com/conti0513?tab=repositories
# DIR
development_private
├──DIR1
├──DIR2
├──DIR3
├──DIR4 # ここを追記
├──.gitignore
├──.git
feature branch —> develop branchへのマージ
Git Hubにプッシュ
ここは通常通りプッシュまでしていきます。
$ git add README.md
$ git commit -m "README.md"
$ git branch
# push前の確認
# ex)
develop
* feature/change_readme
master
$ git push origin feature/change_readme
上記の結果、Git Hub上に「 feature/change_readme had recent pushes less than a minute ago」の記載がされます。
通常であれば、このタイミングでGit-Hub上でPR(プルリクエスト)を作成。その後確認を経てマージされますが、今回はGit-flowでマージしていきます。
GIt flowでマージする手順
- コマンドでマージする
- このコマンドを実行することで、以下の作業が自動に行われる
コマンドで実施されること
- developブランチにcheckout
- featureブランチをマージ
- featureブランチの削除
$ git flow feature finish change_readme
# result
- Switched to branch 'develop'
Updating 4dc4e49..cd7a5b1
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Deleted branch feature/change_readme (was cd7a5b1).
Summary of actions:
- The feature branch 'feature/change_readme' was merged into 'develop'
- Feature branch 'feature/change_readme' has been removed
- You are now on branch 'develop'
# 確認
$ git branch
*develop
master
# リモートにプッシュ
# 自動でPRがクローズされる
$ git push origin develop
develop branch —> main branchへのマージ
releaseブランチでリリースを準備
- releaseブランチでリリースを準備していく
- このコマンドを実行することで、以下の作業が自動に行われる
「release finish」コマンドで実施されること
- releaseブランチをmasterブランチにマージ
- releaseブランチをdevelopブランチにマージ
- releaseブランチを削除
# 書式
git flow release start <tag>
# ex)
$ git flow release start 1.0
# 確認
$ git branch
develop
master
* release/1.0
# releaseブランチをmasterとdevelopにマージ → releaseブランチを削除
$ git flow release finish 1.0
リリース
ここまですると、masterブランチは新しいリリースバージョンのソースコードを持っています。
最後にmasterブランチをタグと一緒にリポジトリにpushしてリリースします。
$ git push --tags
$ git push origin develop
$ git push origin master
注意
最近ではリリースブランチを使わず、develop branch → main branchに直接マージする場合もあります。
リリース後のバグ対応
リリースされたバージョンに緊急のバグが発生するとhotfixブランチで対応します。
まず、hotfixブランチを作成します。
$ git flow hotfix start
作成したhotfixブランチで緊急のバグを修正した後、finishコマンドを使ってmasterブランチにマージします。
$ git flow hotfix finish
このコマンドを実行することで、以下の作業が自動に行われます。
- hotfixブランチをmasterブランチにマージ
- hotfixブランチをdevelopブランチにマージ
- hotfixブランチを削除