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

Pocket

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 モジュールか…
結局原因はわからず仕舞いだった。

コメントを残す

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.