読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

できる! pull request!

最近, GitHubでpull requestを送ったり, pull requestを送ってもらう機会が増えてきました.

自分用メモとして, pull requestをする時や, 送られたpull requestを捌く時に役立つ情報(これらの作業を行う度に確認している事)をまとめてみました.

pull requestをする

「GitHubへpull requestする際のベストプラクティス」という記事が参考になります.

基本的に,

  1. GitHubでfork
  2. ローカルにclone
  3. 作業用ブランチを作って作業
  4. コミットを1つにまとめる
  5. fork元の更新に追随
  6. GitHubに作業用ブランチをpush
  7. GitHubからpull requestを送る

...という流れになります.

fork元のリポジトリをリモートに登録

fork元が@hogehogeの'foobar'だった場合, 次のコマンドでfork元のリポジトリをリモートとして登録できます.

$ git remote add upstream git@github.com:hogehoge/foobar.git

ローカルのmasterブランチに, upstream/master(フォーク元のmaster)を同期させる場合,

$ git pull upstream master

でOKです.

作業用ブランチをpush

作業用ブランチ'working-branch'をGitHubにpushするときは,

$ git checkout working-branch
$ git push origin working-branch

でOK. ローカルと同名の, 'working-branch'というリモートブランチが用意されます.

不要になった作業用ブランチを削除

ローカルの作業用ブランチは, 普通に

$ git branch -D working-branch

で削除します.
一方, リモートブランチに対しては,

$ git push origin :working-branch

このコマンドで, 無名のブランチをpushしてやると削除ができます.
但し, このコマンドで削除するのはGitHubにある作業用ブランチそのものだけでなく, 「ローカルに格納されている, GitHub上の作業用ブランチの情報」も同時に削除してくれます.
その為, 先にGitHubで作業用ブランチを削除してしまうと, この手法で「ローカルに格納されている, GitHub上の作業用ブランチの情報」を削除することができなくなります.

GitHubで作業用ブランチを削除した後に, ローカルに残ったGitHubの作業用ブランチの情報を消したい場合は,

$ git branch -rd working-branch

というコマンドで削除することができます.

pull requestを捌く

こちらの記事を参考にしました: githubでPull Requestを手動で処理する

GitHubのサイト上でpull requestを処理することもできますが, 全てコマンドで解決することもできます.
今回は, @hogehogeが'foobar'に対して, 'working-branch'というブランチをpull requestしてきた場合で説明していきます.

$ git remote add hogehoge git@github.com:hogehoge/foobar.git

まず, pull requestの送り主のリポジトリをリモートとして登録します.

$ git branch pull-request
$ git checkout pull-request

pull requestの送り主から対象となるブランチをpullし, 確認する為に使うブランチを用意します.

$ git pull hogehoge working-branch:pull-request

このコマンドで, @hogehogeがpull requestしてきた'working-branch'というブランチを, ローカルの'pull-request'ブランチにpullすることができます.
'pull-request'ブランチで, 送られてきたpull requestの動作確認等を行い, 問題がなければ,

$ git checkout master
$ git merge pull-request
$ git push

で, pull requestの取り込みが完了となります.

f:id:papix:20130522032201p:plain

GitHub上でも, pull requestの処理が終わったので, このように'CLOSED'が表示されます.

まとめ

GitHubでpull requestを送る/捌く時の情報をまとめてみました.
最近, pull requestを送るのがちょこっと楽しく感じるようになったので, カジュアルにpull requestを送れるようになろうと思います.