HPCメモ

HPC(High Performance Computing)に関連したりしなかったりすることのメモ書き

git mergeで特定のファイルを取り込む

別のブランチで修正したファイルの一部だけを取り込む必要があってぐぐってたんですが、なかなか同じシチュエーションの人が居ないようなので作業の記録を残しときます。

git mergeに特定のファイルを指定するようなオプションは無いので、ちょっと面倒ですがmerge -> 不要なファイルをreset ->commitという流れになります。

実際に使うコマンドはこんな感じです。

> git merge --no-commit -Xtheirs {mergeしたいブランチ名}
> git reset HEAD {mergeしたくないファイル名}
> git checkout {mergeしたくないファイル名}
> git commit

ぐぐるとcherry-pickでできるよ!みたいなことが書かれてるページもあったけど、cherry-pickはあくまで個別のコミットを適用するだけなので、mergeするブランチ側で同じコミットに必要なファイルと不要なファイルが混ざっていたり、複数のコミットでmergeしたいファイルを編集してると難しいです。*1

mergeするファイルが少なければ、こちらでやられているようにmergeするブランチ側でパッチを作って適用というのも一つの手だとは思います。今回は、mergeするファイルが大量&バイナリファイルがかなり含まれていたので使いませんでしたが。*2

blog.bgbgbg.net

*1:1回mergeされる側のブランチでコミットを分割してやればできそうだけど、面倒そう・・・

*2:merge commitの履歴が残らないというのも人によっては気になるかもしれませんね