2021-03-27

.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)

SU の違いは設定の通り -u オプションをつけるか否かだけである。-u をつけるとuntrackedなファイルもまとめてstashしてくれるという違いがある。 正直このコマンドもかなりよく使っていたので、もっとはやい段階でやるべきだった・・。

SstashのS、U-u オプションから。Ppopの P から愚直に取った。

おわりに

今回まとめたコマンド以外にも素のgitコマンドを使ってやっている操作はいくらか思い浮かぶのだけど、あんまり一度に設定しすぎても覚えきれずそのまま化石な設定となる恐れがあるので少しずつ地道に改善をするようにしている。

なお、設定を加える際には以下の記事をよく参考にしており、他にもいろいろな設定例が紹介されている。
https://qiita.com/sfus/items/063797a1dd8fdc7d032f

どのコマンドを割り当てるか、というのが設定時の悩みポイントとなるので設定例があるのはありがたい。