狠狠撸

狠狠撸Share a Scribd company logo
谤别产补蝉别にまつわる   3つの誤解
       山本泰宇
       @ymmt2005
rebaseって?

? 最終兵器
 – 文字通り、最終手段として使うべきもの
 – 公開レポジトリ中心の場合、まず避けるべき
? 過去の一連のコミットを
 – 入れ替え、削除、メッセージ変更、修正、合成
? 公開したコミットグラフを rebase すると
 – push できなくなる(強制することはできるが…)
 – 他人の持つコミットグラフと矛盾が生じる
誤解その1
 「こまめにrebaseしないとコンフリクトする」

? こまめに merge で問題ないです
   $ git fetch origin
   $ git merge --no-ff origin/master
 – この直後なら、コンフリクト発生しません
? むしろ毎日 rebase とか大変
 – コミットごとにコンフリクト解消が必要
 – git rerere とかあるけどさ…
誤解その2
  「rebaseしないとコミットログが汚れる」

? git はコミットグラフをたどる機能も強力です
 – git log --first-parent --no-merges
 – git log --graph --pretty='%x09%h %cn%x09%s %d’


? 一直線なコミットログなら Subversion をどうぞ
誤解その3
 「試行錯誤をみせたくなければrebase」

? squash merge でレビュー用にまとめられます
   $   (DEVブランチで開発して適当にコミット)
   $   git fetch origin
   $   git checkout -b TOPIC origin/master
   $   git merge --squash DEV
   $   git commit

? その後の修正コミットは squash しないでしょ?
 – だから rebase もいらない
おまけ
? merge は --no-ff
  – fast-forward しちゃうとマージが追えなくなる
  – 本当の意味で履歴を追うのが辛くなっちゃいます
     ? 目視でコミット内容を確認するしかなくなる


? --no-ff しかしないようにもできます
  $ git config --global merge.ff false

More Related Content

谤别产补蝉别にまつわる3つの误解

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