goa へのプルリクエストの送り方 (バックポート編) です。
goa では互換性維持のため master と v1 を別ブランチで管理しています。そのため、プルリクエストが master にマージされたあと、その変更を v1 ブランチにバックポートするようお願いされることがあります。本編ではその手順について解説します。
1. リポジトリに移動
コンソールで以下のコマンドを実行します。
$ cd $GOPATH/src/github.com/goadesign/goa
2. v1 から新しいブランチをチェックアウト
コンソールで以下のコマンドを実行します。
$ git fetch $ git checkout -b $BRANCHNAME origin/v1
$BRANCHNAME
には任意のブランチ名を入れてください。例えばブランチ名を foo-bar-v1 とする場合は以下の様になります。
$ git checkout -b foo-bar-v1 origin/v1
3. master にマージされたコミットのハッシュを取得
コンソールで以下のコマンドを実行し、 master にマージされたブランチから対象コミットのハッシュを取得します。
$ git log --oneline $TOPICBRANCHNAME
$TOPICBRANCHNAME
にはプルリクエスト編の 2. で指定したブランチ名を入れてください。今回の例ではブランチ名を foo-bar としていたため以下の様になります。
$ git log --oneline foo-bar
コマンドを実行すると以下のようにコミットログが出力されます。
a5e8203 Use os.Getwd instead of filepath.Abs 2e47e58 Delete a debug print f54c587 Smart package name for gen_controller
先頭カラム (a5e8203
の部分) がコミットハッシュなのでこれを控えておきます。
4. master にマージされたコミットをチェリーピック
コンソールで以下のコマンドを実行し、 3. で取得したコミットをチェリーピックします。
$ git cherry-pick $COMMITHASH
$COMMITHASH
には 3. で取得したコミットハッシュを入れてください。コミットが複数ある場合はチェリーピックもその回数行います。
5. make できることを確認
コンソールで以下のコマンドを実行します。
$ make
これにはプログラムのビルドやテストコードの実行が含まれています。何らかのエラーが発生した場合はコードを修正しそれらを解決します。
6. リモートリポジトリにプッシュ
コンソールで以下のコマンドを実行します。
$ git push -u mine $BRANCHNAME
$BRANCHNAME
には 2. で指定したブランチ名を入れてください。今回の例ではブランチ名を foo-bar-v1 としていたため以下の様になります。
$ git push -u mine foo-bar-v1
7. GitHub でプルリクエストを作成
プルリクエスト編の「 7. GitHub でプルリクエストを作成」を参考にプルリクエストを作成します。
これで完了です。じきにプルリクエストがマージされるでしょう。 v1 ブランチはセマンティックバージョニングされており、数ヶ月毎に新しいマイナーバージョンがリリースされています。そのルールに従って、今回の修正も次のマイナーバージョンに含まれることになるでしょう。