必须同时配置terminal.integrated.defaultprofile.windows和terminal.integrated.profiles.windows,且profile名称与路径严格一致;路径须指向git-bash.exe而非bash.exe,否则git命令不可用;配置后需关闭所有终端并新建才能生效。

直接改 terminal.integrated.defaultProfile.windows 就行,但必须配对写 terminal.integrated.profiles.windows,否则 VSCode 根本不认你写的 “Git Bash” 这个名字。
为什么改了设置还是打开 PowerShell
VSCode 不会动态切换已存在的终端类型。你改完配置后,旧终端标签页(哪怕叫 PowerShell)仍保持原样;它只影响「新建」的终端实例。
- 关掉所有终端面板(不是最小化,是点 × 关闭)
- 用
Ctrl+Shift+`或命令面板里Terminal: Create New Terminal新建一个 - 如果顶部标签页显示的是
PowerShell,说明 profile 没注册成功,不是设置没保存,而是 JSON 有误或路径无效 - 检查
localStorage.getItem('terminal.integrated.defaultProfile')(在 DevTools Console 里运行),看返回值是不是你设的"Git Bash"
路径必须指向 git-bash.exe,不是 bash.exe
很多人填 C:Program FilesGitinash.exe,结果终端能开,但 git、ssh 命令全报 'git' is not recognized —— 因为 bash.exe 是纯 shell,不加载 Git for Windows 的环境封装。
- 正确路径是
C:Program FilesGitgit-bash.exe(64 位默认安装)或C:Users{user}AppDataLocalProgramsGitgit-bash.exe(便携/用户级安装) - 右键该文件 → “属性” → 复制“目标”栏内容,删掉末尾的
--cd-to-home - JSON 中反斜杠要双写:
"C:\Program Files\Git\git-bash.exe",或用正斜杠:"C:/Program Files/Git/git-bash.exe" - 别用
sh.exe或cmd.exe替代,它们不带 Git 环境
settings.json 里必须同时写两段,缺一不可
VSCode 1.79+ 已彻底弃用 terminal.integrated.shell.windows。只设 defaultProfile 不加 profiles,等于只说“我要 Git Bash”,却不告诉它“Git Bash 在哪”,结果就是回退到 PowerShell。
- 打开
Ctrl+Shift+P→Preferences: Open Settings (JSON) - 在已有 JSON 对象内(花括号之间)插入这两段,注意逗号分隔:
"terminal.integrated.defaultProfile.windows": "Git Bash",
"terminal.integrated.profiles.windows": {
"Git Bash": {
"path": "C:\Program Files\Git\git-bash.exe"
}
}
- key 名
"Git Bash"必须完全一致(包括空格和大小写),profile 才能被识别 - 别漏掉
profiles.windows外层的大括号,它必须是对象,不能是数组或字符串 - 工作区
.vscode/settings.json里的同名配置会覆盖用户级设置,先检查那里有没有冲突项
Git Bash 启动后不加载 .bashrc?这是设计如此
VSCode 调用 git-bash.exe 时默认加了 --no-startup-script,所以你的 .bashrc、.bash_profile 全部被跳过 —— 这不是 bug,是 VSCode 为避免启动卡顿做的限制。
- 想让它读配置,得显式传参:
"args": ["--rcfile", "${env:USERPROFILE}/.bashrc"] - 中文乱码、PATH 缺失等问题,基本都源于此;光改 VSCode 设置解决不了
- 如果你用了 WSL 或 Remote-SSH,
.windows后缀的配置完全无效,得配defaultProfile.linux
最常被忽略的其实是 profile key 和路径的严格匹配——VSCode 不猜、不推、不 fallback,错一个字符,它就默默用回 PowerShell。











