1
0

【git】コンフリクトをマージせずに解決する方法 "リベース"

Posted at

はじめに

コンフリクトが起きた時、プルリクを作り直してmergeしていたところ、メンターさんに「リベースで解決できるといいね」とアドバイスをいただきました。リベースってなんだ、と思い使ってみたところとても便利なコマンドだったのでメモしたいと思います。

リベースとは

以下の図のようにmasterブランチから複数のブランチが切られているとします。(図はgit graphを用いています)
スクリーンショット 2024-04-13 22.48.49.png

図のように片方(feature/1)が先にmergeしたとします。
スクリーンショット 2024-04-13 22.51.33.png

その後、feature/2をmerge(git merge origin/feature/2)すると以下のようにコンフリクトが発生して拒否されます。
スクリーンショット 2024-04-13 22.02.25.png

そんな時、リベースが力を発揮します!
現在の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ブランチを切ったかのようになります。
スクリーンショット 2024-04-13 23.27.15.png
※訳あってmasterがmainになってます

このようにベースを定義し直すことからリベースと呼ばれるのかもしれませんね。

最後に

リベースはマージと比べてコミットが作られないというメリットもあるそうです。これまでマージしか使ってきませんでしたが、これから目的に応じてこれら2つを使い分けられるようになりたいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0