Just do IT

思うは招く

git rebase の動作をイメージで理解する

git rebase がわかりづらいので、図解して整理した。(わかりやすさを重視したので、正確には違う点もあるかもしれないがご勘弁を)

たとえば、あなたは feature ブランチをつくり、新しい機能を開発し、いくつかコミットをしたとする。

git checkout -b feature
git commit B
git commit C
git commit D

※便宜上、git addやコミットメッセージは省略している

そのとき、ブランチの状態はこんな感じになる。

f:id:K_Koh:20200713143110j:plain

B、C、Dと、いくつかのコミットに分けている。

これを GitHub へプッシュするには、次のようにコマンドを打てばよい。これでプルリクを出せばいい。

git push origin feature

しかし、チーム開発をしていると、「自分が作業中に master ブランチに変更があった」なんてことが多い(というかほぼ必ずある)。他のメンバーのプルリクがマージされて、master ブランチに新たにコミットが積まれていたりする。

f:id:K_Koh:20200713143113j:plain

master の状態を自分の feature ブランチに取り込んでからプッシュしないと、差分エラーが起きる。なにより、コンフリクトが起きる可能性もある。

いろんな対処法があるかとは思うが、今回のお題は「rebase」なので、rebase をしてからプッシュをする方法をとる。

# master に一旦もどる
git checkout master

# リモートリポジトリから最新の状態を取得する
git pull

# featureブランチへ移動
git checkout feature

# masterをrebaseする
git rebase master

すると、以下のようにコミットが一直線になる。

f:id:K_Koh:20200713143118j:plain

master の変更の上に、自分のコミットを乗せるイメージをするとわかりやすいかもしれない。

rebase の基本的な動きでした。

k-koh.hatenablog.com

参考