-
Notifications
You must be signed in to change notification settings - Fork 0
nvim workflow 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 |
如果只记一条日常路线:
- 改完代码先
<leader>gd - 想看某个文件以前怎么变成现在这样,用
<leader>gL - 想看更大的提交背景,用
<leader>gl
<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 - 多选后按
-:批量执行
这是日常最常用的键,应该形成肌肉记忆
在 vv-git 左栏里,j / k 的意义不是“盲走列表”,而是“边走边看右侧 diff 预览”
这也是为什么它比进右侧 diff 窗口自己滚更高效
这一点很重要。焦点还停在左栏时,就能直接控制右侧 diff 的阅读位置,不需要切窗
<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 |
这里不是 checkout commit,也不会让 HEAD 游离
按 <CR> 后会进入一个更适合阅读的 commit diff 视图,你可以把它理解为:
- 左边文件树
- 右边具体 diff
- 看完按
q关闭 - 关闭后自动回到原来的
gl列表
也就是说,<leader>gl 最核心的动作就是:
- 上下选 commit
- 按
<CR>看详细 diff - 按
q回列表继续看下一个
这正是你说的“也能按下 Enter 查看详细 diff”
-
gl:看整个仓库 -
gL:只看当前文件
如果你已经知道问题在当前文件上,优先 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 |
- 打开出问题的文件
- 按
<leader>gL - 用上下选择一条历史记录
- 按
<CR>看“当前文件”和那次提交的差异
如果只是想顺着文件自身演进去理解逻辑,gL 的价值往往比 gl 更高
<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,再切过去。这一点对日常使用很重要,省得你误进游离状态
<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
<leader>gd- 用
j / k看文件变化 - 用
-stage 需要的文件 - 需要时按
ccommit
- 打开那个文件
<leader>gL- 上下看历史
-
<CR>进详细比较
<leader>gl- 先模糊搜索或上下选
-
<CR>看 commit 详细 diff -
q回列表
<leader>gb-
<CR>checkout -
<C-a>建新分支 -
<C-d>清理旧分支
Neovim 里的 Git 工作流更适合:
- 浏览
- 理解
- 轻量操作
终端更适合:
- 精确
git add - 手工写 commit message
git rebase -icherry-pick- 大范围历史整理
也就是:
- 编辑器里先看清楚
- 真正复杂的 Git 变更仍回终端