前提条件
- リポジトリが異なる
- ファイル構成やソースがほぼ一緒
- (例:別リポジトリでシステムの作り直しが進行している
- ブランチは一致していない
状況
リポジトリBで開発が進んでいて、
リポジトリBのコミットのいくつかを、リポジトリAに取り込みたいと考えています
しかし、リポジトリが異なるため、rebaseやmergeという方法が取れません。
このような状況の時
PhpStormのGit機能を使ってコミットを取り込むという方法を書いていきます。
方法
(1)リモートリポジトリにリポジトリBを追加
[Git] > [リモートの管理]
[+] からリモートリポジトリの追加をする
ここのURLはgit cloneするときのURLを入力
(2) フェッチ
下部メニューの[Git] > [取り込みたいリモートリポジトリ] > [フェッチ]
時間かかる...
ローカルにコミット空っぽのブランチを作って
ブランチ指定でpullしてもいいかも(未検証)
(3) cherry-pickする
大量にやる場合は
- 取り込み先のブランチにチェックアウトする
- 取り込み元(ここではリポジトリBのリモートブランチ)の特定ブランチを選択
- 取り込みたいコミット選択(この時マージコミットを選択すると失敗するので選ばないこと)
- 選択上で右クリック > 🍒Cherry-Pick
(4) コンフリクトしたら解決する
慎重に確認しながらコンフリクトを解消してコミットを取り込んでいく
さいごに
当初は、git format-patch を使って、特定コミットを起点として、
パッチを作成して取り込み先に当てるという方法を考えていたんですが
あまりに慣れぬことで上手くいかず、
普段よく使うcherry-pickで対応という策に落ち着いたという背景があります。
やっていることの状況が、なかなかのレアケースなので
絶対忘れると思い備忘録として書き残します。
弊社では、一緒に働いてくれるエンジニアを募集しています。
個人的には、PhpStorm好きーな人が来てくれたら、IDE談義したいっす
↓そんな感じで興味のある方はこちらから↓
Wantedly - スタジオアンビルト株式会社
こんなWebサービスを作っています。
・マドリー
・Studio Unbuilt