LoginSignup
0
0

More than 1 year has passed since last update.

初めてgit patchを使った

Posted at

あまり遭遇する人はいないだろうけど数年前に分岐したリポジトリA,BがあってAで開発進めていた内容を今回はBにも適用する必要があった。

git patch を使うと良さそうとのことだが聞いたことあるけど使ったことはなかったのでメモを残しておく。

まずAで開発を進めていたコミットからパッチを作成する。

前提:Aでの開発はmasterからhogeというブランチで作業を進めていたとする。

最新のmasterをローカルにチェックアウト(既にチェックアウトしてるならpull等で最新に)

git checkout -b master origin/master

パッチファイルの作成

hoge ブランチをチェックアウトしてパッチを作成。

git checkout hoge
git status

ここで指定するのはローカルのmasterブランチ

git format-patch master

実行すると以下のようなファイルが生成される。

0001-composer-92684.patch
0002-API-HogeClass-92791.patch
0003-API-93064.patch
0004-API-93124.patch

中身はいつも見てるコミットログのようなもの。

分岐してるリポジトリBで取り込む

Aリポジトリでさっき作成したパッチファイルをBリポジトリにコピー・移動する。

取り込み

git am -3 0001-composer-92684.patch

-3 は3-way merge

成功すると以下のようにコミットログが表示される。

Applying: ほげほげほげ

失敗した場合

失敗する理由としては私の場合は以下のようなものだった。
・Bリポジトリに存在しないファイルの差分
・Bリポジトリでは中身が全然異なるファイルの差分
・Bリポジトリのファイルに対象の行がない
・ファイル名のリネーム

Patch failed at 0001 ほげほげ

このようなメッセージが表示された場合は残念ながらマージに失敗しているので差分を確認する。

差分は発生していないと思うので以下のコマンドで適用&確認を行う。

git apply -v 0001-composer-92684.patch

ここで差分がでてるならコンフリクトを解消して以下のコマンドで次のパッチへ進む。

git am --continue

差分なんか出ないんだけどって時はパッチファイルを直接開いて原因を解決する。

あとはこれの繰り返し。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0