LoginSignup
1
2

More than 5 years have passed since last update.

gitのブランチをきれいにしたい。

Posted at

はじめに

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開始時の設定

  1. git-flowで使用する各ブランチを設定する。
    • git flow init
    • いくつか質問されるが、基本的に全てそのままEnterキーで良い。
    • ローカルにmaster以外のブランチがあり、developブランチがない場合、デフォルトの設定ではうまくいかない。
      • ローカルにmasterとdevelopのブランチが両方ある状態(他のブランチがあっても良い)か、ローカルがmasterブランチだけの状態になってからgit flow initを行うこと。

git-flowの流れ

機能追加を行う

新しい機能を開発するときなどは、新しくfeatureブランチを作成して作業する。

  1. 新しくfeatureブランチを作成する。
    • git flow feature start <feature name>
    • featureの単位はDevOpsのTrack And Planに作成されているStoryが適正。
    • すでにあるfeatureブランチから子featureを作るときは以下のようにする。
      • git flow feature start <new feature> <base branch name>
  2. featureブランチで作業を行う。
    1. featureブランチの作業をリモートに公開するとき
      • git flow feature publish <feature name>
      • 同じfeatureを複数人で開発する際には定期的にpublish/pullする必要がある。
    2. 現在のfeatureブランチがリモート側で更新されているとき
      • git flow feature pull <feature name>
  3. featureブランチでの作業が終わったとき
    • git flow feature finish <feature name>

featureがfinishされると、featureブランチの内容がdevelopブランチにマージされ、featureブランチが削除される。
また、feature nameはブランチ名のfeature/以降の名前なので注意。

すでにリモートに存在するfeatureブランチをローカルに取得してくる場合

方法はふたつ

  1. git flow feature track <feature name>
  2. git checkout -b <local branch> <remote branch>

2.の方法だとローカルブランチに好きな名前をつけることが出来るが、git flow feature finishしたときのマージ先がdevelopになると思われるので注意。

masterブランチにリリースする

いくつかのfeatureブランチがfinishし、developの内容をmasterブランチに反映させるためには次の手順を行う。

  1. releaseブランチを作成する。
    • git flow release start <release name>
  2. (必要なら)releaseブランチで調整やバグフィックスを行う。
    • 修正があった場合、git flow release publish <release name>で変更を公開できる。
  3. 準備ができたらリリースする。
    • git flow release finish <release name>
    • releaseブランチの内容がmasterブランチに反映される。さらに、リリースタグが付けられる。
    • releaseブランチに修正があった場合、developブランチにも反映される。
  4. developブランチに反映された修正は、必要であれば各自featureブランチに反映させる。
    • git rebaseなどで対応可
    • あるいはgit mergegit cherry-pick <commit hash>などを使う

あとがき

git-flowは分かりやすくて好きなんですけど、例えばVSCodeに付属しているgitの機能をGUIから使おうとすると、結構めんどくさくなるんですよね…。
SourceTreeならgit-flowをサポートしてるとか書いてますけどね。
でもやっぱりbashが好き。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2