Skip to content

nvim workflow git

ES edited this page Jul 20, 2026 · 1 revision

Neovim 工作流:Git

这篇讲的是“在编辑器里怎么看 Git 状态、历史和分支”,不是 Git 命令入门

这套配置里的 Git 工作流主要有 5 个入口:

快捷键 作用 适合什么场景
<leader>gd vv-git 工作区改动面板 看当前改了什么、暂存、丢弃、提交、推送
<leader>gl 仓库提交历史 查整个仓库最近提交、打开某个 commit 的详细 diff
<leader>gL 当前文件提交历史 看这个文件过去怎么改的
<leader>gb 分支列表 checkout、建分支、删分支、rebase、merge
<leader>gs stash 列表 apply、pop、drop stash

如果只记一条日常路线:

  1. 改完代码先 <leader>gd
  2. 想看某个文件以前怎么变成现在这样,用 <leader>gL
  3. 想看更大的提交背景,用 <leader>gl

1. <leader>gd:工作区改动面板

<leader>gd 打开的不是原生 git diff,而是你的 vv-git 面板

它更像 VS Code 左侧 Source Control 加右侧 diff 的组合视图,适合做这些事:

  • 看当前工作区到底改了哪些文件
  • 一边浏览文件列表,一边自动刷新右侧 diff 预览
  • 直接 stage / unstage / discard
  • 直接从面板里 commit / push / pull / publish

最常用键

作用
j / k 上下移动,右侧 diff 会跟着刷新
<CR> / l 文件上打开 diff;目录或 section 标题上展开 / 折叠
h 折叠当前节点,或收起整个 section
- 单个或多选切换 stage / unstage
d staged 上是 unstage,unstaged 上是 discard
<Tab> 多选文件
<C-e> / <C-y> 在左侧面板里直接向下 / 向上滚动右侧 diff
]c / [c 跳到右侧 diff 的下一个 / 上一个 chunk
c commit
p push
P pull
u publish 当前分支
gc 进入 commit diff 选择器
gw 切换 worktree
H 选择一个 commit,和 HEAD 做比较
gf 跳到文件
Y 复制文件绝对路径
g? 打开帮助
<Esc> 有多选时先清空多选;否则关闭面板

关键点

- 是真正高频键

  • Changes 区按 -:stage
  • Staged Changes 区按 -:unstage
  • 多选后按 -:批量执行

这是日常最常用的键,应该形成肌肉记忆

j / k 不只是移动

vv-git 左栏里,j / k 的意义不是“盲走列表”,而是“边走边看右侧 diff 预览”

这也是为什么它比进右侧 diff 窗口自己滚更高效

<C-e> / <C-y> 是滚右侧 diff,不是滚左栏列表

这一点很重要。焦点还停在左栏时,就能直接控制右侧 diff 的阅读位置,不需要切窗


2. <leader>gl:仓库提交历史

<leader>gl 用来浏览整个仓库的 commit 历史

它适合:

  • 想知道某个功能最近是谁加的
  • 想找最近一次相关提交
  • 想进入某个 commit 看完整 diff

最常用键

作用
<CR> vv-git 打开这个 commit 的详细 diff 视图
<C-o> 打开原始 raw diff
<C-l> 扩大历史范围,继续加载更多提交
<M-h> 复制 commit hash
<M-y> 复制 commit 标题
Ctrl-n / Ctrl-p 上下选择结果
<C-e> / <C-y> 预览区下滚 / 上滚
Esc 关闭 picker

<CR> 到底会打开什么

这里不是 checkout commit,也不会让 HEAD 游离

<CR> 后会进入一个更适合阅读的 commit diff 视图,你可以把它理解为:

  • 左边文件树
  • 右边具体 diff
  • 看完按 q 关闭
  • 关闭后自动回到原来的 gl 列表

也就是说,<leader>gl 最核心的动作就是:

  1. 上下选 commit
  2. <CR> 看详细 diff
  3. q 回列表继续看下一个

这正是你说的“也能按下 Enter 查看详细 diff”

glgL 的差别

  • gl:看整个仓库
  • gL:只看当前文件

如果你已经知道问题在当前文件上,优先 gL


3. <leader>gL:当前文件提交历史

<leader>gL 只看当前 buffer 的 Git 历史

它适合:

  • 排查这个文件是谁改的
  • 看这个文件某段逻辑是什么时候出现的
  • 比较“当前文件”和“过去某次提交里的这个文件”

最常用键

作用
<CR> vv-git 比较当前文件和该提交版本
<C-o> 打开该提交的 raw diff
<M-h> 复制 commit hash
<M-y> 复制 commit 标题
Ctrl-n / Ctrl-p 上下选择结果
<C-e> / <C-y> 预览区下滚 / 上滚
Esc 关闭 picker

它最适合的使用方式

  1. 打开出问题的文件
  2. <leader>gL
  3. 用上下选择一条历史记录
  4. <CR> 看“当前文件”和那次提交的差异

如果只是想顺着文件自身演进去理解逻辑,gL 的价值往往比 gl 更高


4. <leader>gb:分支列表

<leader>gb 不只是看分支,它还是一个轻量 Git 分支操作面板

最常用键

作用
<CR> checkout 当前选中的分支
<C-a> 从当前选中分支创建新分支并切换过去
<C-d> 删除分支
<C-r> rebase 当前分支到选中分支上
<C-y> merge 选中分支到当前分支
<M-f> git fetch --all
<M-y> 复制分支名
Ctrl-n / Ctrl-p 上下选择结果
<C-e> / <C-y> 预览区滚动分支日志

一个细节

这里 <CR> 在远程分支上不会直接进入 detached HEAD

它会优先尝试创建本地 tracking branch,再切过去。这一点对日常使用很重要,省得你误进游离状态


5. <leader>gs:stash 列表

<leader>gs 用来看和处理 stash

最常用键

作用
<CR> apply 当前 stash
<C-x> pop 当前 stash
<C-d> drop 当前 stash
<M-h> 复制 stash 引用
Ctrl-n / Ctrl-p 上下选择结果
<C-e> / <C-y> 预览区滚动 stash diff

如果你只想先看看 stash 里到底是什么,直接上下移动即可,预览区会显示 stash diff


6. 推荐日常路线

改完代码后

  1. <leader>gd
  2. j / k 看文件变化
  3. - stage 需要的文件
  4. 需要时按 c commit

排查某个文件回归

  1. 打开那个文件
  2. <leader>gL
  3. 上下看历史
  4. <CR> 进详细比较

想看某个功能整体历史

  1. <leader>gl
  2. 先模糊搜索或上下选
  3. <CR> 看 commit 详细 diff
  4. q 回列表

切分支或整理分支

  1. <leader>gb
  2. <CR> checkout
  3. <C-a> 建新分支
  4. <C-d> 清理旧分支

7. 什么留给终端

Neovim 里的 Git 工作流更适合:

  • 浏览
  • 理解
  • 轻量操作

终端更适合:

  • 精确 git add
  • 手工写 commit message
  • git rebase -i
  • cherry-pick
  • 大范围历史整理

也就是:

  • 编辑器里先看清楚
  • 真正复杂的 Git 变更仍回终端

8. 相关文档

Clone this wiki locally