A tiny Neovim plugin that shows a simple, keyboard‑driven list of recent Git commits and lets you diff them quickly via Diffview.
Works great for: “show me the last N commits, let me pick one (or two) and open the diff”.
- Lists recent commits using
git log(configurablemax_count) - Toggle selection with space, navigate with
j/k - Press Enter to open diffs in diffview.nvim or codediff.nvim
- 1 selected commit → diff that commit against its parent (
<hash>^..<hash>) - Consecutive commits selected → diff the whole range (
<oldest>^..<newest>) - Non-consecutive commits selected → combined diff of only the selected commits (like JetBrains' git log): the skipped commits in between are left out. This works by cherry-picking the selection onto a synthetic commit in a temporary worktree; if a skipped commit conflicts with a selected one, the plugin falls back to opening one diff per selected commit.
- 1 selected commit → diff that commit against its parent (
- Neovim ≥ 0.10 (uses
vim.system) - Git available on your
$PATH - One diff viewer plugin:
{
"Salanoid/gitlogdiff.nvim",
main = "gitlogdiff",
dependencies = {
"sindrets/diffview.nvim",
},
cmd = "GitLogDiff",
opts = { max_count = 300 },
}use({
"Salanoid/gitlogdiff.nvim",
requires = {
"sindrets/diffview.nvim",
},
config = function()
require("gitlogdiff").setup({
max_count = 300,
})
end,
})Note: This plugin defines the :GitLogDiff command on load. If your plugin manager pre-defines lazy command stubs, gitlogdiff.nvim will safely overwrite them (we create the command with force = true).
- Run
:GitLogDiffinside a Git repository - Navigate with
j/k - Toggle selection with
<space> - Press
<CR>to open diffs in your diff viewer - Press
qto close the list
require("gitlogdiff").setup({
max_count = 300, -- how many commits to list
viewer = "auto", -- "auto" | "diffview" | "codediff"
})With viewer = "auto" (the default), the plugin uses diffview.nvim if it is
installed and falls back to codediff.nvim otherwise. Set it explicitly if you
have both and want codediff.
- “No git commits found”: you are likely not in a Git repo (or
max_countis 0) - “git log failed …”: check that
gitis installed and available in$PATH
MIT — see LICENSE.
