














在没有调校过 Git 配置的新环境或容器中协作时,经常陷入三类典型场景:
git commit(遗漏 -m)或交互式 git rebase -i 时,终端直接切入 nano 或 vim,快捷键不熟悉时甚至连保存退出都成问题。git diff 刷出海量红绿字符,单屏跨行对比十分吃力,且无法像 IDE 一样折叠代码上下文。<<<<<<< HEAD、=======、>>>>>>> branch,手动清理不仅耗时,还容易把同事的必要逻辑误删。Git 提供了对外部编辑器与可视化对比/合并工具的原生调度接口:
| 配置项 / 参数 | 核心作用 | 机制与避坑要点 |
|---|---|---|
core.editor = code --wait | 默认文本编辑器 | --wait 极其关键。Git 会挂起当前进程,直到你在 VS Code 中保存并关闭该文件标签页,Git 才会读取提交信息并继续。若缺少 --wait,Git 会瞬间认为编辑结束并直接抛出空提交错误。 |
diff.tool = vscode | 差异比对工具 | 映射 code --wait --diff "$LOCAL" "$REMOTE",利用 VS Code 左右分栏对比视图呈现文件变动。 |
merge.tool = vscode | 冲突合并工具 | 映射 code --wait --merge "$REMOTE" "$LOCAL" "$BASE" "$MERGED",直接唤起 VS Code 专用的可视化 3-Way Merge 视图。 |
mergetool.trustExitCode | 状态码信任 | 设为 true,让 Git 依据 VS Code 退出时的返回值判断冲突是否已处理完毕。 |
mergetool.keepBackup | 备份文件清理 | 设为 false,冲突解决后自动清理无用的 .orig 临时备份文件,避免污染工作区。 |
打开终端,依次执行以下命令完成全局注入:
1. 设置 VS Code 为全局默认编辑器
1 | git config --global core.editor "code --wait" |
2. 配置可视化 Diff 工具
1 | git config --global diff.tool vscode |
3. 配置三方 Merge 工具
1 | git config --global merge.tool vscode |
4. 配置高频实用别名(Alias)
1 |
|
执行 git config --global --edit,将以下配置块合并保存:
1 | [core] |
执行不带任何参数的 commit 命令:
1 | git commit |
VS Code 会弹出一个名为 COMMIT_EDITMSG 的标签页。在其中输入提交信息,按 Ctrl + S(或 Cmd + S)保存,然后关闭该标签页(Ctrl + W / Cmd + W),终端立即完成提交。
逐文件比对:
1 | git dt |
多文件批量比对(强烈推荐):
1 | git dtd |
执行后,VS Code 会在左侧资源管理器中展开一个虚拟文件夹,将所有变动文件列出,点击任一文件即可直接在主区域查看差异,不必在终端来回回车确认。
当 git merge 或 git rebase 提示冲突时,运行:
1 | git mt |
VS Code 会自动打开冲突文件的 3-Way Merge Editor:
在勾选框中直观点击选择采用哪一方的改动,确认底部无误后点击右下角 Complete Merge,再关闭窗口,Git 即自动标记冲突已解决。
command not found: code,在 VS Code 中按快捷键 Ctrl + Shift + P(macOS 对应 Cmd + Shift + P),搜索并运行:Shell Command: Install 'code' command in PATH。--wait 的正常机制,只有关闭标签页通知才能结束进程。~/.bashrc 或 ~/.zshrc 中是否存在 export EDITOR="..." 或 export VISUAL="..."。Shell 环境变量的优先级高于 Git 本地全局配置,将其统一修改为 export EDITOR="code --wait" 即可。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。