You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git不再等待外部编辑器关闭问题排查与解决求助

问题原因分析及解决思路

核心问题根源

从你的GIT_TRACE日志和跨设备复现的情况看,Windows近期更新改变了Git调用外部GUI程序的等待逻辑——Git通过sh.exe启动Notepad时,Windows现在把Notepad识别为后台启动的独立进程,sh.exe会直接退出,导致Git误以为编辑器已关闭。VS Code能正常工作是因为它的--wait参数会让主进程保持阻塞直到窗口关闭,而你之前的Notepad++和WinMerge配置里没有对应的阻塞参数。

针对性修复方案

1. 修复Notepad++作为Git编辑器的配置

修改core.editor配置,让Notepad++启动后保持进程阻塞,直到窗口关闭:

[core]
    editor = cmd /c "start /wait notepad++.exe -multiInst -nosession -notabbar -noPlugin "$*""

解释:start /wait会强制cmd等待Notepad++进程完全退出后才结束,这样Git就能正确感知编辑器关闭事件。

2. 修复WinMerge作为difftool的配置

修改difftool.winmerge.cmd,添加WinMerge支持的-wait参数:

[difftool "winmerge"]
    cmd = WinMergeU.exe -e -u -wait "$LOCAL" "$REMOTE"
    keepBackup = false

-wait参数会让WinMerge保持进程活跃直到对比窗口关闭,避免Git提前删除临时文件。

调试验证方法

  1. 直接测试进程阻塞:在命令行执行notepad++.exe yourfile.txt,查看cmd是否会立即回到提示符;如果是,说明Notepad++是后台启动,需要用start /wait包裹。
  2. 增强Git日志输出:除了GIT_TRACE=1,还可以使用GIT_TRACE_COMMAND=1查看更详细的进程退出状态,确认是否是sh.exe提前退出导致的问题。
  3. 验证配置生效:修改配置后执行git commit,编辑提交信息并关闭Notepad++,检查Git是否正常读取提交内容。

额外注意事项

  • 若使用Scoop安装的Notepad++,建议配置绝对路径避免系统识别问题:
    editor = cmd /c "start /wait C:/Users/username/scoop/apps/notepadplusplus/current/notepad++.exe -multiInst -nosession -notabbar -noPlugin "$*""
    
  • 可尝试以管理员身份运行Git Bash,排除Windows更新后权限变化导致的进程启动异常。

内容的提问来源于stack exchange,提问作者Jatin Sanghvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:52:39