Drowsy Dog's Diary

any note, any thought

[git] masterブランチの入れ替え、的な

| 2 Comments

といっても実際に乗り変わるわけではなく。

たとえば

みたいなブランチが(名前いまいちだけど)あって、
次バージョンの仕様をいろいろ盛り込んでいる間に feature-v2.0 の歴史が master よりもずっと先に進んでしまって、
「もうこれが master でいいよ」みたいな状態のとき。

git branch -m でブランチのリネーム、git push -f で強制 push してしまえば文字通りブランチの入れ替えはできそう。しかし、おそらく複数人で作業しているとしばき倒されますねこれは。

たぶんいろいろ方法はあると思うのですが、ここでは

と、
git merge の ours ストラテジを使ってコンフリクトをすべて自分のブランチ優先で解決した後に、master 側から merge すれば綺麗に上書きしてくれました。

単純に、master 側から

だけすればいけそうな気もしたけど、

そういうもんではないらしい。。

参考:
https://www.kernel.org/pub/software/scm/git/docs/git-merge.html
http://stackoverflow.com/questions/2862590/how-to-replace-master-branch-in-git-entirely-from-another-branch
http://stackoverflow.com/questions/2303124/git-merge-s-theirs-simply


Author: kazoo

犬はさよならを言わないのだ。

2 Comments

  1. はじめまして.たまたま通りがかりました.
    今回の問題の対応方法としては,これでよいと思う(わたしもこうやっています)のですが,説明で少し気になることがありましたのでコメントさせていただきました.

    > git merge の ours ストラテジを使ってコンフリクトをすべて自分のブランチ優先で解決git merge の ours ストラテジを使ってコンフリクトをすべて自分のブランチ優先で解決
    ours 戦略 (-s ours) は「ツリー上マージしたことにするが状態は全て今のまま」というマージ戦略なので,微妙に異なるかと思います.
    おっしゃっているマージ戦略は recursive 戦略(マージ対象が1つのときのデフォルト戦略)の ours “オプション” (-x ours) にあたります.ちなみにこちらは theirs があります.
    (既にご存知でしたら申し訳ありません)

    わたしも同じようなことをしたい時があるので,theirs 戦略があると嬉しいなと思っています.

    突然のつっこみ失礼しましたm(__)m

  2. 最後の

    > $ git checkout master
    > $ git merge -s theirs feature-v2.0

    の部分ですが、

    $ git checkout master
    $ git merge -s recursive -X theirs feature-v2.0

    でいかがでしょうか。
    エラーは”Could not find merge strategy ‘theirs’.” つまりそんなマージ戦略は無いですよということです。

コメントを残す

Required fields are marked *.