その他
    ホーム 技術発信 DoRuby 【git】マージした時のコンフリクトをコマンドで解消
    【git】マージした時のコンフリクトをコマンドで解消
     

    【git】マージした時のコンフリクトをコマンドで解消

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    マージする時ほぼ毎回コンフリクトで時間を奪われるので、楽に解消できそうなコマンドを使ってみたらちょっとだけ楽だったので備忘録として残しておこうと思います。
     

    マージ開始

    マージ開始して

    Auto-merging sample.txt
    CONFLICT (content): Merge conflict in sample.txt
    Automatic merge failed; fix conflicts and then commit the result.
    

    コンフリクトが発生。
    diffを見ると大概こんな感じになってますよね。

    <<<<<<< HEAD
    aaaaaaaa
    =======
    bbbbbbbb
    >>>>>>> merge_branch
    

    これが1個や2個ならいいですが、前のマージの仕方が悪かったのか何なのか、複数に渡って更には複雑化してこんな感じのコンフリクトを起こしたりするともう投げ出したくなります。

    <<<<<<< HEAD
    <<<<<<< HEAD
    aaaaaaaa
    =======
    cccccccc
    >>>>>>> branch
    =======
    bbbbbbbb
    >>>>>>> merge_branch
    

    落ち着いてゆっくり見たらなんだか手作業でもいける気がしますが、
    正直ぱっと見じゃ何がなんだかわからないしやりたくない…。
     

    対処

    先ほどのみたいに凄まじく複雑だし大量にコンフリクト起きてる…けど、どちらかのブランチに合わせてくれればいい、って時がありますよね。
    そんな時はコマンドで一気にやってくれます。
    現在のブランチに合わせて欲しい時は

    git checkout --ours [ファイル名]
    

    マージするブランチに合わせて欲しい時は

    git checkout --theirs [ファイル名]
    

    これで自動でどちらかのブランチに合わせてやってくれます。
    あとはaddしてcommitしてしまえば無事マージ完了します。
     

    最後に

    例として出した複雑化したコンフリクトが実際に起きて、本当に何書いてるんだかわけわからなくなり、今回のコマンドを使い始めるきっかけになりました。
    一気にどちらかのブランチの変更に合わせて欲しい時は本当に便利です。
    無心でコマンド叩きまくって一気に解消したくなりますが、一応diffをちゃんと見てからコマンドを叩くようにしましょう…。