Successfully reported this slideshow.

rebaseにまつわる3つの誤解

13,170 views

Published on

"3 superstitions concerning git rebase"

In-house training material at Cybozu.

Published in: Technology
  • Be the first to comment

rebaseにまつわる3つの誤解

  1. 1. rebaseにまつわる 3つの誤解 山本泰宇 @ymmt2005
  2. 2. rebaseって?• 最終兵器 – 文字通り、最終手段として使うべきもの – 公開レポジトリ中心の場合、まず避けるべき• 過去の一連のコミットを – 入れ替え、削除、メッセージ変更、修正、合成• 公開したコミットグラフを rebase すると – push できなくなる(強制することはできるが…) – 他人の持つコミットグラフと矛盾が生じる
  3. 3. 誤解その1 「こまめにrebaseしないとコンフリクトする」• こまめに merge で問題ないです $ git fetch origin $ git merge --no-ff origin/master – この直後なら、コンフリクト発生しません• むしろ毎日 rebase とか大変 – コミットごとにコンフリクト解消が必要 – git rerere とかあるけどさ…
  4. 4. 誤解その2 「rebaseしないとコミットログが汚れる」• git はコミットグラフをたどる機能も強力です – git log --first-parent --no-merges – git log --graph --pretty=%x09%h %cn%x09%s %d’• 一直線なコミットログなら Subversion をどうぞ
  5. 5. 誤解その3 「試行錯誤をみせたくなければrebase」• squash merge でレビュー用にまとめられます $ (DEVブランチで開発して適当にコミット) $ git fetch origin $ git checkout -b TOPIC origin/master $ git merge --squash DEV $ git commit• その後の修正コミットは squash しないでしょ? – だから rebase もいらない
  6. 6. おまけ• merge は --no-ff – fast-forward しちゃうとマージが追えなくなる – 本当の意味で履歴を追うのが辛くなっちゃいます • 目視でコミット内容を確認するしかなくなる• --no-ff しかしないようにもできます $ git config --global merge.ff false

×