ブランチと手術

Git flow

git-flow のブランチモデル は、5 つのルールと大量の帳簿づけでできています。ルールは簡単で、リリース当日の夕方 6 時に 人が間違えるのは帳簿づけのほうです。ホットフィックスを main にマージして develop を 忘れる、あるいは違うブランチにタグを打つ、といった具合に。

⌘K → Git flow が、その帳簿づけを引き受けます。

リリースブランチ上での git flow ダイアログ。上でブランチを開始し、下で完了する

構成

ブランチ 中身
リリース済みブランチ(main) 本番にあるもの。すべてのリリースはここにタグが打たれます。
統合ブランチ(develop) リリースとリリースの間に、完了した作業が積み上がる場所。
feature/* 1 単位の作業。develop から分岐します。
release/* 安定化中のバージョン。develop から分岐します。
hotfix/* 緊急の修正。main から分岐します。本番は develop を待てないからです。

Gitcito は、git flow CLI が使うのと同じ gitflow.* の git 設定キー (gitflow.branch.master、gitflow.prefix.feature など)を読み書きします。誰かが すでに git flow init を実行したリポジトリはすぐに認識されますし、ここで設定した リポジトリはあとから CLI でもそのまま使えます。Gitcito は終始ふつうの git コマンドを 実行するので、CLI をインストールしておく必要はありません。

セットアップ はそれらのキーを書き込み、統合ブランチがまだ存在しなければリリース済み ブランチから作ります。ほかには何も触れません。名前や接頭辞はあとから 構成を編集 で 変えられます。

開始する

種類を選び、名前を打ち、開始 を押します。ダイアログは、決断する前に、これから作る ブランチとその分岐元を見せます。

feature/search   from develop
hotfix/1.0.1     from main

名前はあなたが打ったもので、接頭辞は構成から来ます。

完了する

完了 こそ自動化する価値のある部分です。すべて起こらなければならない手順がいくつも あるからです。

種類 Gitcito がすること
機能 --no-ff で develop にマージし、ブランチを削除し、develop に留まります
リリース main にマージし、タグを打ち、develop にマージし、ブランチを削除し、develop に留まります
ホットフィックス main にマージし、タグを打ち、develop にマージし、ブランチを削除し、main に留まります

--no-ff は意図的です。あとから グラフ でそのブランチが見えるようにして いるのは、このマージコミットだからです。これがないと短い機能ブランチは一直線の中に 消えてしまい、このモデルは存在理由を失います。

タグは <version tag prefix><name> です。既定の接頭辞なら release/1.1.0 は v1.1.0 になります。リリースにタグを打つ のチェックを外せば省略でき、既定以上の ものが欲しければタグメッセージを書けます。

やらないこと

  • 作業ツリーが汚れていれば止まります。 先にコミットするか スタッシュ してください。完了は 2 つのブランチをマージし、HEAD を 2 回動かします。コミットして いない作業の周りでそれをやることが、作業を失う道筋です。
  • マージが衝突したら、すべてを巻き戻します。 main へのマージは成功したのに develop へのマージが衝突した場合、そのままでは中途半端なリリースだけが残ります。Gitcito は すべてのブランチを元の位置に戻し、コンフリクトを報告します。そのブランチを手で マージし、コンフリクトリゾルバ で解決すれば、あとは自分の手で流れを 仕上げられます。
  • プッシュは決してしません。 完了はローカルの操作です。準備ができたら main、 develop、新しいタグをプッシュしてください — 同期 を参照。

取り消し

取り消し 一発ですべてが戻ります。両方のブランチが以前のコミットへ戻り、タグは削除 され、完了したブランチが元の先頭で作り直されます。完了を気軽に試せるのは、まさにこれが あるからです。

使わないほうがよいとき

git flow が向いているのは、バージョン付きのリリースとサポート対象の本番ブランチを持つ ソフトウェアです。main から 1 日に何度もデプロイしているなら、リリースブランチと ホットフィックスブランチは使われない儀式になります。そういう現場には スタックブランチ か、main から生やす短命なブランチのほうが合います。 モデルのうち機能ブランチの半分だけなら、単独でも十分に機能します。

この翻訳を GitHub で改善