GitHubでPull Requestを修正して取り込む

GitHubでPull Requestを受けることがあります。しかし、

  • 微妙にコーディングスタイルが違う
  • 複数のコミットをまとめて欲しい
  • 開発が進みコンフリクトが発生しマージできない

などの場合があります。

そのような場合、Pull Requestの送信者に修正を依頼し待つという方法があります。しかし、さっさと取り込んでしまいたいこともあります。

ということで、Pull Requestされたものを勝手に修正してきれいにして取り込む方法です。

Pull Requestを修正してマージする

1. Pull RequestのURLを取得する

2. Pull Requestのパッチファイルを取得して適用する

Pull RequestのURLの最後に.patchを追加したURLを取得して、git amでパッチを適用します。

$ curl -L https://github.com/kenjis/php-framework-benchmark/pull/2.patch | git am

Pull Requestがマージ可能ならこれでコミットされた状態になります。

ここで、必要な修正を歴史改竄して加えます。git addしてgit commit –amendしたり、コミットをまとめるならここでgit rebaseします。

後はgit pushするだけです。

3. パッチ適用が失敗した場合

もし、パッチの適用が失敗したら、パッチファイルが保存されるので、patchコマンドで再度当ててみます。

$ patch -p1 < .git/rebase-apply/patch

当然一部または全部が失敗します。パッチ適用をあきらめる場合は、git am --abortでamセッションを中止します。

手動で修正して対応したら、git addしてgit am --continueでamセッションを完了させます。

$ git add .
$ git am --continue

これで、修正済みのPull Requestがきれいにコミットされました。

後はgit pushするだけです。

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

逆に、git amで適用できるパッチファイルを作成するには、以下のようにします。

HEADから3つのコミットのパッチファイルを作成します。1コミットずつ1ファイルが作成されます。

$ git format-patch HEAD~3

1つのファイルにまとめたい場合は、以下のようにします。

$ git format-patch HEAD~3 --stdout > patch

参考

Date: 2015/03/28

Tags: github, git