rebase の理解が微妙

例えば Git Workflow の Rebase Your Development Branch on the Latest Upstream の項にある以下な記述。

$ git fetch upstream
$ git checkout master
$ git rebase upstream/master
$ git checkout 100-retweet-bugfix
[make sure all is committed as necessary in branch]
$ git rebase master

upstream は直前で fork 元を remote add したリポジトリになるはず。で、順に以下なのか。

  • upstream を fetch
  • master な branch を checkout
  • upstream/master を master な branch に rebase
    • git rebase upstream [branch] という形で branch 省略した場合にはカレントな branch が処理対象になる

ということはここまでの処理でローカルの master ブランチを upstream に追従させた、ということが分かります。

  • 100-retweet-bugfix branch を checkout
  • ローカルな master を 100-retweet-bugfix な branch に rebase

ということになるのか。

あと、git rebase -i のナニ

英語力が微妙なのでコマンド発行時に出力される以下なソレが微妙でしたが確認できた。

# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit

ええと、

  • がしかし修正のために停止
  • がしかし直前コミットと一緒にしちゃえ

という事らしい。例えば commit そのものを修正する場合には edit にしておけば良いし、pull request のために commit を纏めるような場合には squash してしまえば良いらしい。
ちなみに、上で書いた形で upstream に追従した上で

$ git checkout 100-retweet-bugfix
$ git rebase -i master

すると upstream の末端以降の commit が処理対象になるはず。なので squash で一つに纏めるのは比較的楽なはず。

なんとなく

pull request 修行、ってありかもと思いはじめていたりして。
それにしてもこうして見るに、やはり Git はパッチ管理なツールですね。