何者にもなれていない5年目のエンジニアブログ

git cherry-pickで起きてしまったconflictの解消方法【--ours、--theirs】

タイトル通り

git cherry-pickってすごい便利ですよね。

ご存知の通り、"git cherry-pick コミット名" で他のブランチのcommitでも、自分のブランチに付けちゃうことができます。 まさしく、さくらんぼをつまんで、自分の枝に付けるといったイメージです。ネーミングセンス抜群ですね。

ですが、これって良くコンフリクト起きます。

今回はそれについてのお話です。

1. とりあえずgit status 話はそれからだ。

とりあえずgit statusしてみてください。

そうすると、conflictしているファイルがあります。

そこでコンフリクトしているファイルを開いて、>>>>HEADから<<<<までを編集するのが普段の流れでしたね。

でも、これ一個、一個コンフリクト解消するためにファイルを直すのって結構、手間なんですよ。 もちろんファイルを見るのは必須ですが、 

このファイルは、cherry-pick前の内容を優先したい、このファイルは、cherry-pick後の内容を優先したいなどがある時があります。

そういう時には、git checkout --ours と git checkout --theirsを使うといいと思います。

git checkout --ours ファイル名

まず、git checkout --oursですが、こちらはgit checkout --ours ファイル名 で指定したファイルでconflictが起きた場所をcherry-pick前の内容に優先して書き換えてくれます。

git checkout --theirs ファイル名

一方、git checkout --theirsはgit checkout --theirs ファイル名 ですが、こちらは指定したファイルでconflictが起きた場所をcherry-pick後の内容に優先して書き換えてくれます。

補足ですが、こちら両方ともスペースをあけてファイル名を指定すれば複数のファイルを一括変換できます。

覚えておいて損は無いコマンドだと思います。参考まで