git-flow の `feature finish` 実行時の挙動について

git-flowのfeature finishを使ってマージをする際fast forwardされる事があり、ドウイウコトか探った。

該当の処理を行っている箇所を覗いてみると…

# merge into BASE
git_do checkout "$DEVELOP_BRANCH"
if [ "$(git rev-list -n2 "$DEVELOP_BRANCH..$BRANCH" | wc -l)" -eq 1 ]; then
        git_do merge --ff "$BRANCH"
else
        if noflag squash; then
            git_do merge --no-ff "$BRANCH"
        else
            git_do merge --squash "$BRANCH"
            git_do commit
            git_do merge "$BRANCH"
        fi
fi

となっている。

原因は、developブランチと対象のfeatureブランチを比較し、コミットが2件以上且つ、squashの指定がなければ –no-ff を付加するように実装されていること。
そのため、コミットが1つの場合 –ff として、fast forwardされてしまう。

マージは常に–no-ffが理想だと思っていて、~/.gitconfigにも、fast-forwardしないよう設定をしているのだけど、 git-flowでは明示的に --no-ff オプションが指定されているため、マージコミットが発生しない。。

これについては Githubにもissueとしてあげらていて、思想が違うと言うことで(?)forkされていました。

せめてオプションを設けてくれればいいのになー。

SHOTA

I'm WEB developer

Tokyo, Japan http://senta.me/