.tigrcの地道な改善
普段から、開発時にお世話になっている tig について、ちょくちょく改善を加えているので最近加えた設定についてまとめてみる。
.tigrc 改善のモチベーション
tig はかれこれ3年近く使い続けているくらいには気に入ってるツールなのだけど、デフォルト状態では割と限られた git 操作しかできない。
実際使っていると tig の UI から離脱して素の git コマンドを使うケースがよく出てくる。
体感7割くらいの git 操作は tig 上で完結しているのでそこまで困ってもいないのだけど、可能な限り tig の世界で完結できたら作業もよりスピーディになり、気持ちの良い開発ができるだろうなと思うようになった。
そういうわけで、素の git コマンドを使っているようなものを意識的に観察し、再び使いそうなコマンドは tig 上で完結できるように設定を地道に改善している。
PullRequest を作る
status view にて Ctrl-r を押すと GitHub に PullRequest を作れるようにした。
bind status <Ctrl-r> ?gh pr create --fill --web --assignee "@me"
PullRequest を作るために、GitHub が公式で提供している gh を使っている。
ブランチを push すれば GitHub の UI 上ですぐに PullRequest を作ることもできるけど、このコマンドによって自分を assignee に自動で割り当てられるようになったのが地味に良かった(それ以前は面倒で assignee 設定はしていなかった)。
Ctrl-r に割り当てたのは、PullRequest の R から取っただけ。P は push コマンドで既に使っていたという事情もある。
revert する
main view にて ! を押すとカーソルのあたっているコミットを revert できるようにした。
bind main ! ?git revert %(commit)
Revert なんてめったにしないだろうと思って、これまでは tig で実行できるようにはしていなかった。 しかし、最近はできるだけコミットを適切な粒度で分割する努力をしており、うまい感じに分割されている場合はコミット単位で取り消したくなることが結構起こるようになったという背景がある。
最近設定したばかりだけど、tig 上でカーソルが当たっているコミットを revert できるのでコミットハッシュをコピペする必要がなくなり、それだけで便利かもしれない。
R(r) ではなく ! に割り当てたのは、この記号には打ち消すような意味があって revert をより連想しやすかったため。
merge する
refs view にて M を押すと、カーソルがあたっているブランチを merge できるようにした。
bind refs M ?git merge %(branch)
ぶっちゃけこれはかなり頻繁に実行していたので、もっとはやい段階で tig 上で完結できるようにすべきだった。
M はもちろん merge の M から。
rebase する
refs view にて + を押すと、カーソルがあたっているブランチで rebase できるようにした。
bind refs + ?git rebase %(branch)
merge ほどではないが、これもよく使うコマンド。マージコミットをわざわざ作りたくないような状況では merge ではなく rebase を使うことが多い。
+ に割り当てたのは、rebase は指定したブランチの上に自分のブランチのコミットを「乗せる」ようなイメージがあるので、+ は連想しやすそうだと思ったため。
stash する
stash view にて、S or U で push し、P で pop できるようにした。
bind stash S ?git stash push "%(prompt Enter stash comment: )"
bind stash U ?git stash push -u "%(prompt Enter stash comment: )"
bind stash P ?git stash pop %(stash)
S と U の違いは設定の通り -u オプションをつけるか否かだけである。-u をつけると untracked なファイルもまとめて stash してくれるという違いがある。
正直このコマンドもかなりよく使っていたので、もっとはやい段階でやるべきだった・・。
S は stash の S、U は -u オプションから。P は pop の P から愚直に取った。
おわりに
今回まとめたコマンド以外にも素の git コマンドを使ってやっている操作はいくらか思い浮かぶのだけど、あんまり一度に設定しすぎても覚えきれずそのまま化石な設定となる恐れがあるので少しずつ地道に改善をするようにしている。
なお、設定を加える際には以下の記事をよく参考にしており、他にもいろいろな設定例が紹介されている。
https://qiita.com/sfus/items/063797a1dd8fdc7d032f
どのコマンドを割り当てるか、というのが設定時の悩みポイントとなるので設定例があるのはありがたい。