背景
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