LoginSignup
2
5

More than 5 years have passed since last update.

Mastodon 1.4.1 へのアップデートでコンフリクト

Last updated at Posted at 2017-06-02

Mastodon 1.4.1がリリースされたのでアップデートするべく

$ git merge v1.4.1
...(中略)...
Automatic merge failed; fix conflicts and then commit the results.

アイエエエエ!!!!コンフリクト!?コンフリクトナンデ!?

状況

本家リポジトリをfork/cloneして自分用のブランチを切ってHEADにしていたが、いまのところ特に変更はしていないのでHEAD = v1.3.3だった。
何も考えずにfast-forwardを期待してmergeを実行したらコンフリクトして頭を抱えた。

(ブランチを切らずにgit checkout v1.4.1でアップデートする運用の場合にはこの問題は発生しないはず)

解決編

とりあえず

$ git merge --abort

で元に戻る。

で、v1.4.1をマージする代わりに

$ git merge 5439a81

とすれば多分良い(試していないので本当にちゃんと動くかはわからない)。これはv1.3.3の属するブランチ(skylight)にv1.4.1時点のmasterをマージしたコミットで、丁度さっきやろうとしたマージのコンフリクトを解決させたコミットということになる。(なおdiff取ってみるとv1.4.1と微妙に違いがあるようだ)
これは執筆(2017年6月3日)時点ではskylightブランチの最新コミットなので、

$ git merge <remote>/skylight

でもよい。(<remote>は各自の設定によりoriginなりupstreamなり)

ただ、これmasterから離れたままなので、今後の本家リリースがどうなるかはよくわからないけれど、場合によってはリリースの度に同じ問題が発生する可能性がある。
自分のブランチをv1.4.1に持って行きたい場合は、

$ git reset --hard $(git merge-base v1.3.3 v1.4.1)
$ git merge v1.4.1

でいけるが、これをリモートリポジトリにpushしようとすると落ちるし(-fが必要)、他のリポジトリからpullしようとするとそこでコンフリクトするので、あまり安易に実行できるわけでもない。
ちなみにgit merge-baseは2つのコミットの共通の祖先を返す。

その他

  • --ff-onlyオプションを使うとコンフリクトが発生することがないので慌てなくて済む。
$ git merge --ff-only v1.4.1
fatal: Not possible to fast-forward, aborting.

This is a patch release that backports a few important improvements from the upcoming v1.4 release which is still a work in progress.

とあり、要するに1.3.3が本流から離れた保守リリースだった故に発生したのかなあと見ている(本家を詳しく追っているわけではないのでよくわかっていない顔)。

参考文献

2
5
1

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
2
5