ブランチのマージと削除

さて、開発中のライブラリでは、不必要になったクラスの完全削除が完了しました。
テストも通して、実際に使ってみて、問題なしと判断。
というわけで、masterブランチにマージしてみようと思います。

といっても実は簡単で、およそ3行のコマンドで事が終わります。*1
僕はgit初心者丸出しちゃんなので、ローカルブランチでのコミットは
すべて終えた状態でのマージになります。
コミットせずにマージしなきゃいけないケースも出てくるだろうけど、
コンフリクトとかいろいろ考えると、趣味の範囲でそこまで試す度胸はないんです(キリッ
まずはブランチのマージ。

$ git checkout master
$ git branch
* master
  box-deletion
$ git merge box-deletion
Updating 4075c86..98d9fe5
Fast-forward
 lib/box.rb            |  177 -------------
 lib/cell.rb           |   40 +---
 lib/npsolver.rb       |  102 +++++---
 spec/box_spec.rb      |  261 -------------------
 spec/cell_spec.rb     |   16 +-
 spec/npsolver_spec.rb |  686 ++++++++++++++++++++++++++++---------------------
 6 files changed, 453 insertions(+), 829 deletions(-)
 delete mode 100755 lib/box.rb
 delete mode 100755 spec/box_spec.rb

lib/box.rb と spec/box_spec.rb が不必要になったクラスとスペックファイルなので、
綺麗に削除されていることがわかります。
ls コマンドで確かめてみると、確かに影も形もない。
どうやら無事マージされたようです。あーよかった。

ここで出力の2行目に Fast-forward という文字列がありますが、
リポジトリがポインタを進めた証拠」という今の僕には理解出来ない説明が
ぐぐったらヒットしたので、誰か親切な人、教えてください。

さらにこの時点で稼働させっぱなしにしていた autotest がテストを開始して
失敗も無かったので、マージをするという点に関してまったく労せず完了したことになります。

続いて、 box-deletion ブランチではもう作業することはないので、削除します。
このブランチをこの世から消し去るためには、

$ git branch
* master
  box-deletion
$ git branch -d box-deletion
Deleted branch box-deletion (was 98d9fe5).
$ git branch
* master
$ git push origin

と、branchコマンドに -d オプションを付けてやります。
ありがとうローカルブランチ、そしてさようなら。

しかしこの状態でgithubにpushしても、ローカルブランチは削除されていません。
リモートにあるリポジトリからローカルブランチを削除するためには

$ git push origin :box-deletion
To git@github.com:sandmark/libnpsolver.git
 - [deleted]         box-deletion

のように、 :(コロン)を頭に付けてやる必要があるようです。
pushがローカルリポジトリの状態をリモートリポジトリに
完全に反映するわけではない、ということなんでしょうね。
わざと手間をかけさせて「本当に消していいの?」と聞かれている気がします。

なぜかpendingのテストが増えていますが、少なくとも一歩前進しました。
あとはRSpecの中身を整頓して、新たな機能を実装していくだけです。*2

*1:が、今回はわかりやすくするために git branch などでいちいち状態を確認してます。

*2:Enumerable? あ、やります。でももうちょっと待ってね。