あるプロジェクトで使ったMakefileを別のプロジェクト(別リポジトリ)でも使用したいシーンがあった。

普通にコピーをするとコミット履歴が失われてしまうので、Makefileのコミット履歴を保ったまま別のリポジトリの空ブランチに移動したい

やりかた

元々のリポジトリでパッチを作成する.

git format-patch --root -o [出力ディレクトリ] -- [対象ファイル名]

git format-patch --root -o /tmp/patchs -- ./Makefile

取り込み先のリポジトリに移動する

cd ../target

空白のブランチを作成する

git checkout --orphan new_branch

パッチを適応する

git am /tmp/patchs/*

トラブルシューティング

fatal: previous rebase directory .git/rebase-apply still exists but mbox given.エラーが出たときは、前回のパッチが残ってしまっている

git am --abortコマンドで最初からやり直すことができる

# エラー内容
$ git am /tmp/patches/*
fatal: previous rebase directory .git/rebase-apply still exists but mbox given.

# リセット
$ git am --abort