

プロジェクトをgit
flowで運用しておりますが、hotfixブランチをmergeした際、developブランチのgraphが汚くなるのが気になっています。  
サンプルの最下段に実際に表示されたログを記載しますが、私としては以下の点が汚く感じました。（綺麗、汚いというのも感覚的なものではありますが）

  * はるか昔のVersion 0.1に対するmerge commitが最初の方に表示されている
  * Version 1.0に対するmerge commitが2つある
  * 単純に線が多い

hotfixがmasterから切られているため、master側にのみ存在したmerge
commitが取り込まれたのかと思いますが、何か対策をご存じの方がおりましたら教えて頂ければと思います。  
＃ なお、hotfixを切る前にdevelopブランチに対して`git rebase master`としておくと綺麗になります。ただし`git push
-f`が必要なため、あまり使いたくはないところです。

## サンプルコード

[code]

    # 初期設定
    git flow init
    echo a1 >> a.txt
    git add .
    git commit -m "Initial commit"
    
    # featureブランチで機能追加
    git flow feature start dummy
    echo a2 >> a.txt
    git add .
    git commit -m "Add feature"
    git flow feature finish dummy
    
    # Version 0.1としてリリース
    git flow release start 0.1
    echo changelog >> changelog
    git add .
    git commit -m "Add changelog"
    git flow release finish 0.1
    
    # 長期間にわたる開発
    for i in `seq 1 100`; do
      echo dummy$i >> a.txt
      git add .
      git commit -m "Add dummy$i"
    done
    
    # Version 1.0としてリリース
    git flow release start 1.0
    echo changelog >> changelog
    git add .
    git commit -m "Add changelog"
    git flow release finish 1.0
    
    # この時点ではdevelop, master共にきれいに表示される
    git log  --graph -n 20 --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset' develop
    # *   8466a19 (HEAD, develop) Merge branch 'release/1.0' into develop - Yo Takezawa, 8 seconds ago
    # |\
    # | * 23f5fa4 (tag: 1.0) Add changelog - Yo Takezawa, 18 seconds ago
    # |/
    # * 3559cae Add dummy100 - Yo Takezawa, 3 minutes ago
    # * a982cbe Add dummy99 - Yo Takezawa, 3 minutes ago
    # * 4c12071 Add dummy98 - Yo Takezawa, 3 minutes ago
    # ...
    
    git log  --graph -n 20 --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset' master
    # *   91da8aa (master) Merge branch 'release/1.0' - Yo Takezawa, 42 seconds ago
    # |\
    # | * 23f5fa4 (tag: 1.0) Add changelog - Yo Takezawa, 47 seconds ago
    # | * 3559cae Add dummy100 - Yo Takezawa, 3 minutes ago
    # | * a982cbe Add dummy99 - Yo Takezawa, 3 minutes ago
    # | * 4c12071 Add dummy98 - Yo Takezawa, 3 minutes ago
    # ...
    
    # バグが見つかったためhotfixで修正
    git flow hotfix start 1.1
    echo hotfix >> hotfix
    git add .
    git commit -m "Add hotfix"
    git flow hotfix finish 1.1
    
    # master側は綺麗
    git log  --graph -n 20 --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset' master
    # *   7778437 (HEAD, master) Merge branch 'hotfix/1.1' - Yo Takezawa, 36 minutes ago
    # |\
    # | * b07b7f5 (tag: 1.1) Add hotfix - Yo Takezawa, 36 minutes ago
    # |/
    # *   91da8aa (develop) Merge branch 'release/1.0' - Yo Takezawa, 37 minutes ago
    # |\
    # | * 23f5fa4 (tag: 1.0) Add changelog - Yo Takezawa, 37 minutes ago
    # | * 3559cae Add dummy100 - Yo Takezawa, 39 minutes ago
    # | * a982cbe Add dummy99 - Yo Takezawa, 39 minutes ago
    
    # develop側が急に汚くなる
    git log  --graph -n 20 --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s %C(green)- %an, %cr%Creset' develop
    # *   d293380 (HEAD, develop) Merge branch 'hotfix/1.1' into develop - Yo Takezawa, 12 minutes ago
    # |\
    # | * b07b7f5 (tag: 1.1) Add hotfix - Yo Takezawa, 12 minutes ago
    # | *   91da8aa Merge branch 'release/1.0' - Yo Takezawa, 13 minutes ago
    # | |\
    # | * \   461e790 Merge branch 'release/0.1' - Yo Takezawa, 18 minutes ago
    # | |\ \
    # * | \ \   8466a19 Merge branch 'release/1.0' into develop - Yo Takezawa, 13 minutes ago
    # |\ \ \ \
    # | | |_|/
    # | |/| |
    # | * | | 23f5fa4 (tag: 1.0) Add changelog - Yo Takezawa, 13 minutes ago
    # |/ / /
    # * | | 3559cae Add dummy100 - Yo Takezawa, 16 minutes ago
    # * | | a982cbe Add dummy99 - Yo Takezawa, 16 minutes ago
    # * | | 4c12071 Add dummy98 - Yo Takezawa, 16 minutes ago
    
[/code]


CC BY-SA 3.0
2015-04-16T07:41:52.403
9227
2016-10-15T03:15:05.247
2016-10-15T03:15:05.247
754
2728
question
git git-flow
Git flowでhotfixブランチをmergeした際のグラフをきれいにする方法


git はその制約上、どうしてもその履歴は混沌としたものになるものだ、と受け入れるのがいいと思います。 git はそのソースコードは git
で管理されていますが、その履歴の管理フローは git flow
よりもさらにアクロバティックで、おそらくもともと「必要に応じてコミットグラフをたどって情報を抽出するスクリプトを書けばいいよね！」といった想定なのだと思います。

が、やはり歴史を綺麗に保ちたい要望というのは常にあるので、最近だと github は PR を accept する際に squash したり rebase
したりだという機能を持つようになりました。しかし、これは github flow では master
（メンテ対象ブランチ）は常に一つである、という想定（前提）があるから成り立っているように思います。

master/develop の２つをメンテする想定の git flow では、どうしても歴史は汚く（というか、複雑に）なってしまうのではないでしょうか。


CC BY-SA 3.0
2016-10-10T13:39:46.057
29461
2016-10-10T13:39:46.057
754
9227
answer