Gitのネットワーク図を綺麗にするための運用方法

2 min read読了の目安(約2200字

初めに


上記のような汚いネットワーク図を

このようなネットワーク図にする運用方法です

そもそもネットワーク図を綺麗にする意味とは

メリット

  • 綺麗な方が心が落ち着く(超重要)
  • 履歴が見やすい
  • マージでのトラブルが少なくなる(コンフリクト等)
  • 間違ったgit操作を行われても図を見るとすぐにわかる

デメリット

  • 打つコマンド量が若干増える(1〜2コマンド)
  • gitの知識をより覚える必要がある

使うもの

  • git rebase
  • git pull -r
  • git push -f
  • git merge --no-ff

この4つのコマンド使うと綺麗なネットワーク図を作ることができます
しかし、運用方法を解説する前にまず4つのコマンドの紹介をしたいと思います

git rebase と git pull -r

コマンド解説

このコマンドは両方ともrebaseである

git rebase

これはスタンダードなリベース

git pull -r origin feature/OOO

こちらは指定したリモートのブランチをリベースするコマンドである

rebaseは簡単な紹介

http://kray.jp/blog/git-pull-rebase/

これ以上にわかりやすい資料は無いと思ってる

コンフリクトについて

ブランチの根っこを付け替える作業となるのでもちろんコンフリクトを起こす
治し方はマージと同じで、中断やリトライのコマンドが若干変わる

git rebase --continue
git rebase --abort

この二つさえ覚えておけば大体なんとかなる

使う理由

綺麗にするため

マージの代わりに大元のブランチから変更を取り込むものとして使います
リベースでは無く、マージで変更を取り込むと、大元のブランチにマージする際にオートマージで事故る危険性があり、それを回避するためでもある

git push -f

コマンド解説

みんな大好きフォースプッシュ
誰しもが怖い、使うなという禁忌のコマンド

リモートにブランチがあっても強制的に上書きをするというコマンド

git reflog show origin/OOO
git checkout refs/remotes/origin/OOO@{O}

これを知っていれば怖がる必要もない
reflogは操作履歴を表示するコマンドで、その履歴にダイレクトでチェックアウトすることでフォースプッシュ前のリモートにチェックアウトすることができる
それを再度フォースプッシュで上書きすれば、問題が起きたとしても解決することができる

また、ローカルでやらかした時にも使えるのでオススメ

使う理由

リベースをした際に、リベースする前のブランチをプッシュしていると再プッシュ時にエラーとなる
理由は生えている根っこが変わっているので、プッシュできないと言われるからです
これを直すには

  1. フォースプッシュ
  2. リモートのブランチを削除からの再プッシュ
    しかし、2番はプルリクエストを投げている最中に行うと、プルリクエストがクローズしてしまうので1番を使うのです

git merge --no-ff

コマンド解説

そもそもマージは二種類存在しており

  • git merge --ff
    • fast-fowardの略、下の図での右側
    • git mergeのデフォルトで指定されてる方法
  • git merge --no-ff
    • no-fast-fowardの略、下の図での左側
    • コマンドで使う場合は、--no-ffを指定しなければ使えない
    • githubのプルリクエストのマージボタンのデフォルトで指定されてる方法

主な違いは、マージ時にマージコミットを作成するかしないかの差でしかない

使う理由

マージコミットを用意することで、そのコミットリバートするだけて、変更点を削除できるからである
たまにあるいきなりの仕様取り消しとかで役に立つ

ネットワーク図を綺麗にするgitの運用方法

大元のブランチに変更が加わったら

git rebase 

または、

git pull -r

を実行する

コードレビューが終わり、マージボタンを押す前には

git pull -r
git push -f

をしてからマージボタンを押す(ネットワーク図に問題が無いかを絶対に確認する)
これを続ければ綺麗なネットワーク図が完成します。