@@ -70,8 +70,12 @@ Gitリポジトリを新規作成するとデフォルトで作成されるブ
7070- ひとつの変更に対してひとつのfeatureブランチを作成し、作業完了後に削除するため、開発中で最も使われる短命なブランチである
7171- 基本的に1人の開発者のみが利用する
7272
73+ <div class =" img-bg-transparent " >
74+
7375![ feature branch] ( img/branch_strategy_feature.drawio.png )
7476
77+ </div >
78+
7579以下の命名に従う。
7680
7781- ` feature/ ` のプレフィックスを付ける
@@ -92,8 +96,12 @@ fixtypo
9296
9397開発の中心となるブランチである。
9498
99+ <div class =" img-bg-transparent " >
100+
95101![ develop branch] ( img/branch_strategy_develop.drawio.png )
96102
103+ </div >
104+
97105## releaseブランチ
98106
99107リリースするために使用するブランチで、主な特徴は以下である。
@@ -102,26 +110,38 @@ fixtypo
102110- releaseブランチではバグ修正、ドキュメント生成、その他のリリースに伴うタスクのみを実施する
103111- mainブランチのマージコミットにリリースタグを打ち、mainブランチをdevelopブランチへマージ後、releaseブランチを削除する
104112
113+ <div class =" img-bg-transparent " >
114+
105115![ release branch] ( img/branch_strategy_release.drawio.png )
106116
117+ </div >
118+
107119## hotfixブランチ
108120
109121本番リリースに対して迅速にパッチを当てて修正する場合に使用するブランチで、主な特徴は以下である。
110122
111123- 修正が完了するとmainとdevelopの両方(あるいは進行中のreleaseブランチ)にマージされる
112124- main/developブランチがあると必要になる可能性がある。main/featureブランチのみの運用では必須ではない(管理上の目的でfeatureとhotfixを分けることはあり得る)
113125
126+ <div class =" img-bg-transparent " >
127+
114128![ hotfix branch] ( img/branch_strategy_hotfix.drawio.png )
115129
130+ </div >
131+
116132## topicブランチ
117133
118134featureブランチで実現する機能を複数人で開発する場合に使用するブランチである。
119135
120136- topicブランチが必要なケースでは、featureブランチへの直接プッシュを行ってはならない
121137- GitHub Flowではfeatureブランチのことをtopicブランチと呼称する場合があるが、本規約ではfeatureブランチから派生するブランチをtopicブランチと定義する
122138
139+ <div class =" img-bg-transparent " >
140+
123141![ topic branch] ( img/branch_strategy_topic.drawio.png )
124142
143+ </div >
144+
125145# ブランチ戦略の選定
126146
127147ブランチ戦略は以下の方針で選定する。
@@ -163,8 +183,12 @@ featureブランチで実現する機能を複数人で開発する場合に使
163183
164184## 1. developブランチを複数作成する場合
165185
186+ <div class =" img-bg-transparent " >
187+
166188![ multi develop branch] ( img/branch_strategy_multi_develop.drawio.png )
167189
190+ </div >
191+
168192日々のエンハンス開発と並行して、数カ月後に大型リリースを行いたい場合がある。このときは複数リリースバージョンを並行して開発するため、 ` develop ` 、` develop2 ` といった複数のdevelopブランチを作る必要がある。
169193
170194概要:
@@ -178,8 +202,12 @@ featureブランチで実現する機能を複数人で開発する場合に使
178202- 誤操作を避ける目的でcherry-pickは行わない
179203- ` devleop2 ` への同期は、 ` develop ` -> ` main ` ブランチに反映されるタイミングで同期を行う(これにより、品質保証済みの変更のみ取り入れることができる)
180204
205+ <div class =" img-bg-transparent " >
206+
181207![ release multi develop branch] ( img/branch_strategy_release_multi_develop.drawio.png )
182208
209+ </div >
210+
183211### develop2のリリース手順
184212
1852131 . ` develop ` から` develop2 ` へマージコミットする(2でコンフリクトが起こらないよう、前準備の意味合いで実施する。)
@@ -193,8 +221,12 @@ featureブランチで実現する機能を複数人で開発する場合に使
193221
194222## 2. 過去バージョンをサポートする場合
195223
224+ <div class =" img-bg-transparent " >
225+
196226![ multi version branch] ( img/branch_strategy_multi_version.drawio.png )
197227
228+ </div >
229+
198230(社内外の)ライブラリでインターフェースの大型改善や仕様変更を受けて、メジャーバージョンを1→2に上げることがる。この時に過去バージョンもサポートする必要があると、バージョン別にsupportブランチを作成する。
199231
200232概要:
@@ -228,10 +260,10 @@ developブランチの変更をfeatureブランチに取り込む方法には、
228260
229261機能ブランチに対して開発ブランチの変更を取り込む方法は「マージ」「リベース」2つの方法が考えられる。
230262
231- | 1. マージコミット | 2. リベース |
232- | ------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
233- | ![ マージ] ( img/merge_strategy_develop_to_feature_merge.drawio.png ) | ![ リベース] ( img/merge_strategy_develop_to_feature_rebase.drawio.png ) |
234- | ` get fetch & git merge ` (≒ ` git pull ` )。マージコミットが作成される | ` get fetch & git rebase ` (≒ ` git pull --rebase ` )。最新の開発ブランチの先頭から新たにコミットを作りなされ、マージコミットは作成されない |
263+ | 1. マージコミット | 2. リベース |
264+ | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
265+ | < div class = " img-bg-transparent " > ![ マージ] ( img/merge_strategy_develop_to_feature_merge.drawio.png ) </ div > | < div class = " img-bg-transparent " > ![ リベース] ( img/merge_strategy_develop_to_feature_rebase.drawio.png ) </ div > |
266+ | ` get fetch & git merge ` (≒ ` git pull ` )。マージコミットが作成される | ` get fetch & git rebase ` (≒ ` git pull --rebase ` )。最新の開発ブランチの先頭から新たにコミットを作りなされ、マージコミットは作成されない |
235267
236268本規約の推奨は「2. リベース」である。
237269
@@ -325,24 +357,24 @@ Terraformはplanが成功しても、applyが失敗することは多々あり
325357
326358developブランチにfeatureブランチの変更を取り込む方法は下表のように3パターン存在する。
327359
328- | | 1.マージコミット | 2.リベース | 3.スカッシュマージ |
329- | ---- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
330- | 名称 | Create a merge commit | Rebase and merge | Squash and merge |
331- | 流れ | ![ Merge Commit] ( img/merge_strategy_feature_to_develop_merge_commit.drawio.png ) | ![ Rebase and Merge] ( img/merge_strategy_feature_to_develop_rebase_and_merge.drawio.png ) | ![ Squash and Merge] ( img/merge_strategy_feature_to_develop_squash_and_merge.drawio.png ) |
332- | 説明 | ` git merge --no-ff ` で変更を取り込む | featureブランチを最新のdevelopブランチにリベースし、` git merge --ff ` で変更を取り込む | ` git merge --squash ` で変更を取り込む |
333- | 特徴 | developブランチにマージコミットが作成される | マージコミットは作成されず、履歴が一直線になる | featureブランチで行った変更YとZを1つにまとめたコミットがdevelopブランチに作成される |
360+ | | 1.マージコミット | 2.リベース | 3.スカッシュマージ |
361+ | ---- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------- -------------------------------------------------------------------------------------- |
362+ | 名称 | Create a merge commit | Rebase and merge | Squash and merge |
363+ | 流れ | < div class = " img-bg-transparent " > ![ Merge Commit] ( img/merge_strategy_feature_to_develop_merge_commit.drawio.png ) </ div > | < div class = " img-bg-transparent " > ![ Rebase and Merge] ( img/merge_strategy_feature_to_develop_rebase_and_merge.drawio.png ) </ div > | < div class = " img-bg-transparent " > ![ Squash and Merge] ( img/merge_strategy_feature_to_develop_squash_and_merge.drawio.png ) </ div > |
364+ | 説明 | ` git merge --no-ff ` で変更を取り込む | featureブランチを最新のdevelopブランチにリベースし、` git merge --ff ` で変更を取り込む | ` git merge --squash ` で変更を取り込む |
365+ | 特徴 | developブランチにマージコミットが作成される | マージコミットは作成されず、履歴が一直線になる | featureブランチで行った変更YとZを1つにまとめたコミットがdevelopブランチに作成される |
334366
335367::: tip GitLabを利用する場合
336368
337369GitLabでも開発ブランチに機能ブランチの変更を取り込む方法は3種類ある。
338370
339371ただし、マージリクエスト上のオプションによってコミット履歴が変わる点が注意である。
340372
341- | | 1. Merge commit | 2. Merge commit with semi-linear history | 3. Fast-forward merge |
342- | ---- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
343- | 流れ | ![ Merge commit with squash commits] ( img/merge_strategy_feature_to_develop_squash_and_merge_gitlab.drawio.png ) | 省略 | 省略 |
344- | 説明 | GitHubにおける ` Create a merge commit ` と同様のマージ方法 | ` Merge commit ` と同じコマンドを使用して、機能ブランチの変更を取り込む方法 | GitHubにおける ` Rebase and merge ` と同様のマージ方法 |
345- | 注意 | ` Squash commits ` を選択してマージした場合、` squash commit ` と ` merge commit ` の2つのコミットが作成される | ソースブランチがターゲットブランチより古い場合はリベースしないとマージできない。 | マージリクエスト上で ` Squash commits ` を選択してマージした場合、GitHubにおける ` Squash and merge ` と同様のマージ方法になる(※補足1) |
373+ | | 1. Merge commit | 2. Merge commit with semi-linear history | 3. Fast-forward merge |
374+ | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
375+ | 流れ | < div class = " img-bg-transparent " > ![ Merge commit with squash commits] ( img/merge_strategy_feature_to_develop_squash_and_merge_gitlab.drawio.png ) </ div > | 省略 | 省略 |
376+ | 説明 | GitHubにおける ` Create a merge commit ` と同様のマージ方法 | ` Merge commit ` と同じコマンドを使用して、機能ブランチの変更を取り込む方法 | GitHubにおける ` Rebase and merge ` と同様のマージ方法 |
377+ | 注意 | ` Squash commits ` を選択してマージした場合、` squash commit ` と ` merge commit ` の2つのコミットが作成される | ソースブランチがターゲットブランチより古い場合はリベースしないとマージできない。 | マージリクエスト上で ` Squash commits ` を選択してマージした場合、GitHubにおける ` Squash and merge ` と同様のマージ方法になる(※補足1) |
346378
347379(※補足1)マージ方法で Merge commit を選択して、マージリクエスト上で Squash commits オプションを選択してマージした場合は以下と同義である
348380
@@ -418,8 +450,12 @@ git merge --no-ff $SOURCE_SHA
418450 - issue-312のリリースは業務上の合意が得られていない(エンドユーザ操作に影響があるため、事前告知した日時でリリースしたいなど)
419451 - issue-394は不具合修正であり業務上の優先度が高いため、なるべく早くリリースしたい
420452
453+ <div class =" img-bg-transparent " >
454+
421455![ 同一ファイルを複数] ( img/release_overtaking.drawio.png )
422456
457+ </div >
458+
423459よく陥りがちな対策としては次の2点が考えられる。
424460
4254611 . issue-312をリバートする
@@ -437,8 +473,12 @@ git merge --no-ff $SOURCE_SHA
437473
4384742の例を以下に図示する
439475
476+ <div class =" img-bg-transparent " >
477+
440478![ hotfixで追い抜き] ( img/release_overtaking_hotfix.drawio.png )
441479
480+ </div >
481+
442482# ブランチ命名規則
443483
444484ブランチ名の命名規則は、[ ブランチの種類] ( #ブランチの種類 ) 章に従うこと。
0 commit comments