git-flow で 「リリースを完了」 「ホットフィックスを完了」 させようとすると、 master にマージされずに失敗する


Git における、有名なブランチの運用モデルのひとつに、 “A successful Git branching model” (日本語訳) というものが存在する。

内容については、「サルでもわかる Git 入門」さんの、以下の解説がわかりやすい。

上記のブランチの運用モデルを簡単に行うための git-flow 拡張が存在し、 Git for Windows 2.5.3 以降に標準で同梱されている。
また、 Git GUI クライアントの SourceTree では、 上記の git-flow が使いやすい UI にまとめられている。

そんな便利な git-flow だが、あるときふと気づいたら、私の手元の環境でうまく動かなくなってしまっていた。

具体的には、
リリースブランチ を完了させた場合、
160625_1
本来であれば、以下のように release/* の内容が masterdevelop ブランチにマージされて タグが作成されるはずが、
160625_2
なぜか master ブランチにマージされずに、 変な場所に タグ が作成されてしまう。
160625_3

リリースを完了させた時だけではなく、ホットフィックスを完了させた場合も同様になる。

不便きわまりない!

原因は 身に覚えのない git config の設定

git-flow した際のログを見てみると、以下のようになっている。

sh.exe gitflow_local\gitflow\git-flow release finish v0.0.0
Switched to branch 'master'

Automatic merge went well; stopped before committing as requested

M	test.txt

Switched to branch 'develop'

Merge made by the 'recursive' strategy.

 test.txt | 1 +
 1 file changed, 1 insertion(+)


Deleted branch release/v0.0.0 (was 73008d1).

どうも、 master ブランチにチェックアウトした後、 マージが完了しないまま develop ブランチにチェックアウトされているくさい。

この Automatic merge went well; stopped before committing as requested というメッセージは、 git merge したときに --no-commit オプションが指定された場合のもののようだ。 これが指定されていると、マージした際に (ステージされるだけで) コミットされないもよう。

なぜ develop ではマージがコミットされているのに、 master ではコミットされないのか。

いろいろ調べていると、 git config の設定を使って、安全のため 「master 上で git merge するときは常に –no-ff」 するというテクニックが存在することに気づく。

なんか、これくさい。

ためしに、 git config -l で 設定の一覧を取得してみると、

branch.master.mergeoptions=--no-commit --no-ff

あった!!!

git config --unset branch.master.mergeoptions設定を削除すると、 冒頭の問題が発生しなくなった

原因は不明

しかし、このような設定を最近行った覚えがないのが、すこぶる気持ち悪い…

最近 git config の設定に関係しそうな事柄と言ったら 何かをインストールしたとき だろうけれど、 Visual Studio 2015 か、 Visual Studio Code か、 はたまた なにかの npm モジュールか…
結局原因はわからず仕舞いだった。

コメントを残す

メールアドレスが公開されることはありません。