The Diary of Aska

スマートなプルリクエストを贈りたい

私がgithubのレポジトリをforkするのは、プルリクエストしたい場合が殆どだ。

forkしてファイルを更新、プルリクエスト、github素晴らしい!それが大体去年から今まで。

しかし、2回目以降のプルリクエストは美しくなかった、diffは確かに編集した箇所が的確に出ているがcommitがやけに多い、見てみると「Merge remote branches...」これは以前作業してから今までの間のfork元の更新をmergeした際のcommitログだ、仕組み的には正しいがこのcommitログまで送られるのはスマートじゃない、しかし都度forkし直すのはもっとスマートじゃない...。

同じ様な事を思った人は多い筈、そんなものなのかなとも思っていたが..。

色々考えた挙句、fork元レポジトリを起点にブランチを作って編集を開始する、という所に落ち着いた。

というよりリモートブランチを起点にブランチを作れるのを知らなかった。

  1. fetchでfork元レポジトリを落としてくる
  2. fork元レポジトリのタグなどからローカルにブランチを作る
  3. 更新する
  4. プルリクエストする

これなら、4.のリクエストには相手のStableなタグから自分が手を加えるまでのcommitしか載らないし、古いローカルリポジトリにmergeする必要もない。

結論として、forkしたgithubのmasterブランチは要らない子、という事になった。(私の中で)

ログ

git clone git@github.com:s-aska/Net--Dropbox.git
cd Net--Dropbox
git remote add github-norbu09 https://github.com/norbu09/Net--Dropbox.git
git fetch github-norbu09
git checkout -b maint-oauth refs/tags/1.2
# メンテ時はここからファイル編集、テスト、git add、git commitする
git add some_file
git commit
# 「もうmasterに入れちゃった更新が...」という時はcherry-pickで救出
git cherry-pick e392a9264718db5a0da6
git cherry-pick 07c5d97ec6f590d94957
git push --all
# あとはGUIからmaint-oauthブランチを選択し、「プルリクエスト」すれば良い