diff --git a/lua/git/cmd.lua b/lua/git/cmd.lua index ae710be..8ce6f65 100644 --- a/lua/git/cmd.lua +++ b/lua/git/cmd.lua @@ -93,11 +93,17 @@ local function run_in_split(worktree, args, conf) vim.b[buf].git_worktree = worktree if conf.needs_ref then local user_ref = first_positional(args, 2) or "HEAD" - local sha = repo.rev_parse(worktree, user_ref, true) or user_ref - vim.b[buf].git_ref = sha - vim.b[buf].git_parent_ref = - repo.rev_parse(worktree, user_ref .. "^", true) - pcall(vim.api.nvim_buf_set_name, buf, "git://" .. sha .. "/") + local sha = repo.rev_parse(worktree, user_ref, true) + if sha then + vim.b[buf].git_ref = sha + vim.b[buf].git_parent_ref = + repo.rev_parse(worktree, user_ref .. "^", true) + end + pcall( + vim.api.nvim_buf_set_name, + buf, + "git://" .. (sha or user_ref) .. "/" + ) end vim.bo[buf].filetype = conf.ft diff --git a/lua/git/status_win.lua b/lua/git/status_win.lua index 465e00a..1ff2565 100644 --- a/lua/git/status_win.lua +++ b/lua/git/status_win.lua @@ -311,6 +311,10 @@ local function render(bufnr, branch, groups) }) end state[bufnr].lines = meta + -- The diff windows we last opened may now be showing content for an + -- entry whose underlying file has changed. Drop the cache so the next + -- show_diff recomputes pre/post panes instead of short-circuiting. + state[bufnr].last_shown_key = nil end ---@param bufnr integer