はじめに

Yaziでファイルを眺めていると、「あれ、このファイル前はどんな内容だったっけ?」と思うことがある。git logでコミット履歴を見てもいいが、ターミナルを行ったり来たりするのは面倒だ。そこで、Yazi上でgit履歴を辿ってファイルを復元できるプラグイン git-time-machine.yazi を作った。

git-time-machine.yaziとは

git-time-machine.yaziは、Yaziのファイルマネージャー上でgit履歴からファイルを復元するプラグインである。ホバーしているファイルに対してキーバインドを押すと、fzfによるコミット一覧が表示され、deltaによるdiffプレビューを確認しながら復元するバージョンを選択できる。

主な機能は以下のとおり。

  • fzfによるインタラクティブなコミット選択
  • deltaによるシンタックスハイライト付きdiffプレビュー(deltaがない場合はgit diff --color=alwaysにフォールバック)
  • git log --followによるリネーム追跡
  • 上書き前の確認ダイアログ
  • macOS・Linux・Windows対応

インストール

必要なツール

ツール名用途
gitgit操作全般
fzfコミット一覧のインタラクティブ選択
deltaシンタックスハイライト付きdiffプレビュー(任意)

プラグインのインストール

ya pkg add masaki39/git-time-machine

キーバインドの設定

~/.config/yazi/keymap.tomlに以下を追記する。

[[mgr.prepend_keymap]]
on  = ["g", "t"]
run = "plugin git-time-machine"
desc = "Git time machine (restore file from history)"

ここではgt(git time-machineの略)をキーバインドとして設定しているが、好みで変更して構わない。

使い方

gitリポジトリ内のファイルにホバーした状態でキーバインドを押すと、そのファイルに関するコミット一覧がfzfで表示される。コミットを選択するとdeltaによるdiffプレビューが表示され、Enterを押すと確認ダイアログの後にファイルが復元される。

キー操作
Enter選択したコミットのバージョンにファイルを復元
Escキャンセル
ctrl-j / ctrl-k下 / 上に移動
ctrl-r検索クエリをクリア

おわりに

ターミナルを離れることなく、Yazi上でgit履歴を辿ってファイルを復元できるようになった。「ちょっと前のバージョンに戻したい」という場面で気軽に使えるので、ぜひ試してみてほしい。