はじめに
コンフリクトが起きた時、プルリクを作り直してmergeしていたところ、メンターさんに「リベースで解決できるといいね」とアドバイスをいただきました。リベースってなんだ、と思い使ってみたところとても便利なコマンドだったのでメモしたいと思います。
リベースとは
以下の図のようにmasterブランチから複数のブランチが切られているとします。(図はgit graphを用いています)
図のように片方(feature/1)が先にmergeしたとします。
その後、feature/2をmerge(git merge origin/feature/2
)すると以下のようにコンフリクトが発生して拒否されます。
そんな時、リベースが力を発揮します!
現在のmasterの状態をfeature/2にpushします。
git push origin master:feature/2 -f
feature/2にチェックアウトし、フェッチしてから、リベースします。
git fetch
git rebase origin/master
上記2つのコマンドは以下のコマンドでまとめて実行することもできます。
git pull --rebase origin master
すると、まるでfeature/1のマージ後にfeature/2ブランチを切ったかのようになります。
※訳あってmasterがmainになってます
このようにベースを定義し直すことからリベースと呼ばれるのかもしれませんね。
最後に
リベースはマージと比べてコミットが作られないというメリットもあるそうです。これまでマージしか使ってきませんでしたが、これから目的に応じてこれら2つを使い分けられるようになりたいです。