git rebase がわかりづらいので、図解して整理した。(わかりやすさを重視したので、正確には違う点もあるかもしれないがご勘弁を)
たとえば、あなたは feature ブランチをつくり、新しい機能を開発し、いくつかコミットをしたとする。
git checkout -b feature git commit B git commit C git commit D
※便宜上、git add
やコミットメッセージは省略している
そのとき、ブランチの状態はこんな感じになる。
B、C、Dと、いくつかのコミットに分けている。
これを GitHub へプッシュするには、次のようにコマンドを打てばよい。これでプルリクを出せばいい。
git push origin feature
しかし、チーム開発をしていると、「自分が作業中に master ブランチに変更があった」なんてことが多い(というかほぼ必ずある)。他のメンバーのプルリクがマージされて、master ブランチに新たにコミットが積まれていたりする。
master の状態を自分の feature ブランチに取り込んでからプッシュしないと、差分エラーが起きる。なにより、コンフリクトが起きる可能性もある。
いろんな対処法があるかとは思うが、今回のお題は「rebase」なので、rebase をしてからプッシュをする方法をとる。
# master に一旦もどる git checkout master # リモートリポジトリから最新の状態を取得する git pull # featureブランチへ移動 git checkout feature # masterをrebaseする git rebase master
すると、以下のようにコミットが一直線になる。
master の変更の上に、自分のコミットを乗せるイメージをするとわかりやすいかもしれない。
rebase の基本的な動きでした。