gitでブランチを操作しながら開発してるとき、よくブランチを完全削除ではなく一旦ゴミ箱的な場所に移したいと思うケースがありました。
gitのブランチ削除は復元する方法がないため、もし削除してしまったブランチをもとに戻す場合は泣きながらreflogでハッシュ番号を漁る必要があります。しかし、それを恐れて無駄なブランチを削除しないと使わないブランチがどんどん増えて、どれが今開発してる(生きている)ブランチなのかわからなくなってきます。
現状ではそういった「たぶんいらないブランチ」はgit branch -mオプションを利用してtrash/というプレフィックスをつけていました。これにより今使ってるブランチといらないブランチをはっきりと区別することができます。ただ、branchAをtrashへ移動させたい場合、
$ git branch -m branchA trash/branchA
とbranchAという文字列を2度打つ必要があり面倒でした。加えて、全体的にコマンドが長いです。
そこで、gitのサブコマンドを自作して以下のように打てるようにしました。
$ git trash-branch branchA
ソースコード、インストール方法、使い方はbigwheel/git-trash-branchを参照してください。
今回はシェルスクリプトのコードに対してrspecで単体テストを書くという自分では初めての挑戦をしています。これ、やってみるとかなり良かったです。ruby自体がかなりコマンド実行と親和性が高いため、両方書ける人ならかなり直感的に書くことができます。
あとやり残したこととしてはインストールをchefで書いて、chef-applyからコマンド一発でできるようにすることぐらい。