背景
GitおよびGitHubを利用したプロジェクトにおいて、開発プロセスにPull Requestを利用しているプロジェクトは非常に多いと思います。
そして、GitHubは開発者がPull Requestを作成することを楽にするために、pushされたブランチに対して、 Compare & Pull Request というリンクを作成してくれます。
ここをクリックした時に表示されるのは、 Default Branch に対しての差分表示及びPull Request作成画面です。masterブランチのように、Default BranchにPull Requestを送る時には最高のボタンになりますが、Default Branch以外のブランチで開発しており、masterブランチから該当ブランチへの差分が非常に大きい時は、作業効率を低下させるボタンになってしまいます。
というのも、
- ボタンをクリック後、GitHubが差分を計算し、それが最終的にブラウザで表示されるまで、長時間待たされます。大きなレポジトリだと10秒以上待たされることも。。。
- 長時間待たされた結果、自分が
Pull Requestを送りたくないDefault Branchとの差分を見ることになります。例えば、another-masterブランチやdevelopブランチ、特定の大型リリース向けのブランチ、安定運用中のメンテナンスブランチなどにPull Requestを送りたい時に、以下のようなmasterとの差分を見ても困りますよね。
- そして、自分の出したいPull Requestを作成するためには、上記画面から
baseブランチを目的のブランチに変更する必要があります。
複数ブランチ開発において、開発サイクルの中心にあるようなPull Request作成が非効率になるのは健全ではないですし、ストレスもたまってしまうので、効率的な手法を紹介したいと思います。
準備物
gitに加えて、hubをインストールしておく必要があります。Macの方は、Homebrewでインストールするのが楽です。
brew install hub
hub pull-request を利用する方法
作業ブランチからgit pushを行った後に、作業ブランチで以下のコマンドを打つだけです。
hub pull-request -b <base> -m <message>
ここで、<base>は、Pull Requestのマージ先のブランチです。
Pull Requestの作成を自動化したい、サクッとPull Requestを作りたいなどの場合において、この手法は非常に有用です。
しかし、ブラウザでのPull Request作成に慣れている人間にとっては、GitHub上での、開発効率化の為の各種恩恵が受けられなくなるデメリットがあります。例えば、Pull Request Templatesや、人・チーム・Issueなどへの補完機能が利用できなくなります。
hub compare を利用する方法
そこで、hub compareを利用する手法がオススメできます。
以下のコマンドを打つと、STARTで示されたブランチをbaseとして、ENDで示されたブランチへの差分がブラウザ上で見れます。
hub compare [-u] [USER] [<START>...]<END>
例えば、以下のようなコマンドを打てば、ブラウザが立ち上がり、目的の Compare & Pull Request ページにいきなりたどり着くことができます。
hub compare another-master...feature/hoge
とはいえ、毎回これを打つのも大変です。
おすすめとしては、以下のようなgit aliasを登録することです。
git config --global alias.pr-to '! f() { hub compare $1...$(git rev-parse --abbrev-ref HEAD); }; f'
これにより、マージ先のブランチを指定するだけで、現在のブランチを元にCompare & Pull Requestページを開くことのできるエイリアス(といっても独自関数に近い)が利用可能になります。
hub pr-to <base>
これで、ブラウザをポチポチする必要はなくなり、push直後に目的のPull Request作成ページを開くことができるようになります。
git push origin feature/hoge
hub pr-to another-master
