引数なしの hub pull-request
を実行すると、リポジトリのデフォルトブランチに向けたプルリクエストを作ってくれます。このデフォルトブランチはふつう master を向いてますが、変更可能なので Git Flow で言う develop 的なブランチをデフォルトブランチにしているプロジェクトもあると思います。
さて、このデフォルトブランチをプロジェクトの歴史の中のどこかの時点で変えると、新しく clone したリポジトリで hub pull-request
すると当然 develop に向けてプルリクエストを作りますが、デフォルトブランチの変更以前にこのリポジトリを clone していたリポジトリで hub pull-request
すると master に向けたプルリクエストを作ろうとしてしまいます。-b develop
すれば develop を向くのだけど、これは事故の元……。
原因
hub pull-request
は -b {base}
が与えられなかったとき refs/remotes/origin/HEAD
という ref (GitHub のデフォルトブランチはこれに対応しています)を参照し、これが向いている先をデフォルトブランチとみなして、そのブランチに向けたプルリクエストを作成します。この origin/HEAD という symbolic ref は git clone 時に作成されるのですが、それ以外のタイミングでは更新されることがない。そのため、途中からデフォルトブランチを変更しても古いリポジトリでは追従できないわけです。
対策
以下のコマンドを実行する。
% git remote set-head --auto origin origin/HEAD set to develop
リモートの Git リポジトリの HEAD を、手元に反映させます。めでたし。手元の HEAD がどうなっているかは、以下のコマンドで確認できます。
% git symbolic-ref refs/remotes/origin/HEAD
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (12件) を見る