git cherry-pickでバイナリーファイルが衝突

こんにちは、さるまりんです。

久しぶりにgitのことです。

特定のコミットだけを手元に取り込む必要が出てきました。

git cherry-pickの出番です。

git cherry-pick

git cherry-pick [コミットID]

これでコミットIDでの変更のみ取り込んでこれで問題なくできればいいんですが、エラーです!画像のファイルがぶつかってマージできないと。。

$ git cherry-pick 84dfd3e762f5379b1c6d966b1b5e19a6e9d144f4
warning: Cannot merge binary files: profile.jpg (HEAD vs. 84dfd3e76... 画像差し替え)
error: could not apply 84dfd3e76... 画像差し替え
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

さて、どうしよう?

git checkout --ours, --theirs

cherry-pickする前の状態にするか、それとも取り込むコミットの状態にするかで実行するコマンドが変わります。

cherry-pick前の状態にするには

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

取り込むコミットの状態にするには

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

今回は取り込むコミットで新しい画像を用意してたのでそちらを採用。

こちらを実行しました。

$ git checkout --theirs profile.jpg

--ours。「自分たちの」ですね。ローカルにチェックアウトされているブランチを自分たちということかな。

そして、--theris。「彼らの」ですね。取り込むコミットを彼らということかな。

cherry-pickといい、oursといい、theirsといい、なんかいいですね〜。cherry-pick、さくらんぼつみですよ。センス感じます。英語では普通かもですがなんか好きです。

gitややこしいな、このコマンドで大丈夫かなって思うんですが、頑張って使いこなせるようになりたいです。

読んでくださってありがとうございます。

ではまた!