June 01, 2020

あるリポジトリの変更を別リポジトリに git で適用する

プログラミング
Git

2つのとても似ているリポジトリがあって(ライブラリにしろとか、submodule にすれば?というのは置いておいて)、片方の差分をもう片方に適用したい。

端的に言うと、cherry-pick を別リポジトリに対してやりたいわけなんだけれども普通はできない。

やろうと思えば、例えばこんな感じでできる。

ちょっと面倒だなと思ってしまったので、古き良き時代に倣って奥ゆかしく patch を作ってそれを適用することにしてみます。

# 変更を採用したい元のリポジトリの最新コミットの patch を取得
$ git diff @~ > <HOGE>/diff.patch
# 適用したいリポジトリに移動
$ cd <HOGE> 
$ git apply diff.patch 
# コミットする
$ git add .
$ git commit -m '...'

基本はこれだけ。
patch コマンドでもいいけど、 git apply でサポートされているのでそちらを使った。

わざわざコミットしないといけないけれど、一回きりの作業に remote リポジトリを追加するのも気が引けて、削除するのも手間も考えるとどっこいどっこい。