Gitで別リポジトリにコミットの変更を適用する方法(git format-patch / apply)

2分で読める テック
最終更新:

リポジトリの分割やモノレポからのサービス切り出しの際、「このコミットの変更だけ別リポジトリにも反映したい」というケースがあります。

git cherry-pick はリモートが異なるリポジトリ間では使えないため、パッチファイルを介して変更を移植するのが確実です。

手順

1. パッチファイルを作成する

元のリポジトリで、適用したいコミットからパッチを生成します。

git show <commit-hash> -- path/to/target/file > /tmp/apply.patch

特定のディレクトリ配下の変更だけを含めたい場合は、パスを指定します。

git show abc1234 -- src/api/ > /tmp/apply.patch

複数コミットをまとめてパッチにしたい場合は format-patch が便利です。

git format-patch <base-commit>..<target-commit> --stdout > /tmp/apply.patch

2. パッチ内のパスを調整する(必要な場合)

リポジトリ間でディレクトリ構成が変わっている場合、パッチファイル内のパスを書き換えます。

sed -i '' 's|a/old-path/|a/new-path/|g; s|b/old-path/|b/new-path/|g' /tmp/apply.patch

3. 移行先リポジトリでパッチを適用する

cd /path/to/new-repo
git apply /tmp/apply.patch

適用前にドライランで確認するのがおすすめです。

git apply --check /tmp/apply.patch

よくあるエラーと対処

エラー原因対処
patch does not applyパスの不一致 or コンテキスト行の差異--3way オプションを試す
trailing whitespace空白の差異--whitespace=fix を付与

まとめ

git show or git format-patch でパッチを作り、git apply で適用するだけで、リポジトリをまたいだ変更の移植ができます。CI/CD パイプラインでの自動適用にも応用可能です。

© 2026 Amane Inoue