PerlerのRuby日記

Rubyとか

勉強会でGitの使い方について色々知った

  • A-B-C-Dと積まれているコミットを

A-B-C

└D

みたいに分けたいときどうするか

    • branch && reset && commit -a
    • それrebase --ontoでできね?
    • マニュアル見よう! git help rebase
       We can get this using the following command:

           git rebase --onto master next topic

       Another example of --onto option is to rebase part of a branch. If we have the following situation:

                                       H---I---J topicB
                                      /
                             E---F---G  topicA
                            /
               A---B---C---D  master

       then the command

           git rebase --onto master topicA topicB

       would result in:

                            H'--I'--J'  topicB
                           /
                           | E---F---G  topicA
                           |/
               A---B---C---D  master

       This is useful when topicB does not depend on topicA.
    • へぇへぇへぇへぇへぇ
  • Aブランチの機能を前提にしたBブランチがあって、Bブランチの機能を前提にしたCブランチがあって…、どうするべき?
    • 「Aブランチの機能を前提にしているBブランチ」→BはAに依存している→一つの大きな機能と言える(以下同文)
    • Bブランチが完成した時点でAをBの先頭までFFで進めて、Cをそこから切ってを繰り返して、(以下同文)
    • 最後にAとmasterを合体するときにマージコミットを作れば、履歴とか残っていいんじゃね?
    • なるほどー
    • gitconfigでdiffのときとかlogのときとか、もっと細かく色を指定できる
    • blinkうざいw
    • diffしたときにファイル名付近の塊が白色で、他と混ざるのを防げるのは良い!
  • rebaseすべき? mergeすべき?
    • pull reqでconflict発生したときの話
    • 機能的にmasterと関連ないならrebaseしても誰も困らないし、歴史も綺麗
    • mergeで追従しちゃうとマージコミットが1個できる。このコミットに意味があるかないかが判断材料。
  • rebase -iしたときのオプション
    • pick=残す、squash=上のと合体、edit=そこで止めて編集、fixup=squashと一緒だけどこのコミットメッセージは要らない
  • add -pしたときのオプション
    • y=インデックスステージに乗せる、n=乗せない、q=そこでadd止める、e=エディタが開いて自分で仕分け、s=1行単位で再表示


rebase --ontoと、rebase -iのfixupと、add -pのs(split)を覚えた!