git rebase -i のインターフェースについて
ちょっと前の下書きから。
そもそもの発端はShougoさんが git rebase -i の
あのエディタを立ち上げてしまうインターフェースはxxxだ、というようなことを言っていたことから。
対話的なプログラムは他のプログラムから呼び出しにくい(Vimからとか)。
まぁ便利なのはわかるけど、自分もそう思っていたので、なんとなく代替となるインターフェースをぐだぐだ考えてみた。
git-drop-commits {commit} [{commit} ...]
- 特定コミットを削除
- 複数指定可能
git-swap-commits {from} {to} [{from} {to} ...]
git-fixup-commits {since}..{until}
エディタが立ち上がった時に指定するfixupみたいな。
範囲を与えると、一番最初のコミットと全部一緒くたにする。
git-squash-commits {since}..{until}
ぶっちゃけsquashよりもfixupしか使わない感じなのであんまりいらない。
というかコミットログを書くためにエディタが起動するけど、あれはどうするかな。
全部(というかだいたいは1,2個だろうけど)に対してコメントを指定するのは面倒。
git-reword {commit} {msg}
コミットログを書き換え。
git-detach
エディタが立ち上がった時に指定するeditみたいな。
名前はsubmoduleを扱ったりするとなったりするdetached HEADから。*1
なんか微妙に単語間違えてる気がしなくもない。
git rebase -i
そしてgit rebase -iはこれらを内部的に扱うインタラクティブなインターフェースであればいいと思った。
git rebase -iがこういうインターフェースになってる以上、
それぞれのサブコマンドに対して$GIT_EDITORに設定するプログラムを作る必要がありそう*2。