はじめに
gitに関するメモの中で触れた、git-flowについてのメモです。
これも眠ってたので記事にしてみることにします。
git-flowの概要
git-flowの概要はこのページに簡単な説明がある。
Git for windowsには初めから付属されているので特になにも考えずともgit flowコマンドが使えるようになっている。
Linuxとかだと別途インストールが必要になるようだ。具体的なインストール方法はこのページを参照。
git-flowでは以下のブランチを使用して開発を進める。
- master: 常にデプロイ可能なブランチ。
- develop: 開発用ブランチ。開発中の最新の状態が保管されている。
- feature: 機能追加などの新規開発用ブランチ。開発する機能ごとに作る。
feature/
というプレフィックスを付ける。 - release: リリース用ブランチ。
- hotfix: 緊急を要するバグフィックス用ブランチ。
主な作業はfeatureブランチ上で行う。
以下では、機能追加を行う流れに沿ってgit-flowの使い方を説明する。
git-flow開始時の設定
- git-flowで使用する各ブランチを設定する。
git flow init
- いくつか質問されるが、基本的に全てそのままEnterキーで良い。
- ローカルにmaster以外のブランチがあり、developブランチがない場合、デフォルトの設定ではうまくいかない。
- ローカルにmasterとdevelopのブランチが両方ある状態(他のブランチがあっても良い)か、ローカルがmasterブランチだけの状態になってから
git flow init
を行うこと。
- ローカルにmasterとdevelopのブランチが両方ある状態(他のブランチがあっても良い)か、ローカルがmasterブランチだけの状態になってから
git-flowの流れ
機能追加を行う
新しい機能を開発するときなどは、新しくfeatureブランチを作成して作業する。
- 新しくfeatureブランチを作成する。
git flow feature start <feature name>
- featureの単位はDevOpsのTrack And Planに作成されているStoryが適正。
- すでにあるfeatureブランチから子featureを作るときは以下のようにする。
git flow feature start <new feature> <base branch name>
- featureブランチで作業を行う。
- featureブランチの作業をリモートに公開するとき
git flow feature publish <feature name>
- 同じfeatureを複数人で開発する際には定期的に
publish/pull
する必要がある。
- 現在のfeatureブランチがリモート側で更新されているとき
git flow feature pull <feature name>
- featureブランチの作業をリモートに公開するとき
- featureブランチでの作業が終わったとき
git flow feature finish <feature name>
featureがfinishされると、featureブランチの内容がdevelopブランチにマージされ、featureブランチが削除される。
また、feature name
はブランチ名のfeature/
以降の名前なので注意。
すでにリモートに存在するfeatureブランチをローカルに取得してくる場合
方法はふたつ
git flow feature track <feature name>
git checkout -b <local branch> <remote branch>
2.の方法だとローカルブランチに好きな名前をつけることが出来るが、git flow feature finish
したときのマージ先がdevelopになると思われるので注意。
masterブランチにリリースする
いくつかのfeatureブランチがfinishし、developの内容をmasterブランチに反映させるためには次の手順を行う。
- releaseブランチを作成する。
git flow release start <release name>
- (必要なら)releaseブランチで調整やバグフィックスを行う。
- 修正があった場合、
git flow release publish <release name>
で変更を公開できる。
- 修正があった場合、
- 準備ができたらリリースする。
git flow release finish <release name>
- releaseブランチの内容がmasterブランチに反映される。さらに、リリースタグが付けられる。
- releaseブランチに修正があった場合、developブランチにも反映される。
- developブランチに反映された修正は、必要であれば各自featureブランチに反映させる。
-
git rebase
などで対応可 - あるいは
git merge
やgit cherry-pick <commit hash>
などを使う
-
あとがき
git-flowは分かりやすくて好きなんですけど、例えばVSCodeに付属しているgitの機能をGUIから使おうとすると、結構めんどくさくなるんですよね…。
SourceTreeならgit-flowをサポートしてるとか書いてますけどね。
でもやっぱりbashが好き。