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

在PowerShell中让git mergetool自动选择(m)odified解决合并冲突

解决Git合并冲突时自动选择Modified版本的PowerShell方案

我懂你这种烦躁——手动逐个确认每个冲突文件,尤其是碰到那种「本地删除/远端修改」的冲突提示时,反复输入m真的太磨人了。之前用Echo m | git mergetool只搞定第一个文件,是因为管道只传了一次输入,而git mergetool每处理一个冲突都会重新索要输入,所以得让PowerShell持续输出m直到命令跑完。

下面给你两个靠谱的解决方案:

方案一:用PowerShell持续生成输入

你可以用PowerShell的while循环不断输出m,通过管道传给git mergetool,这样每个冲突提示都会自动收到m的选择:

while($true) { Write-Output 'm'; Start-Sleep -Milliseconds 100 } | git mergetool

这个脚本会一直输出m,每次间隔100毫秒(防止输出太快Git处理不过来),直到git mergetool处理完所有冲突。等它跑完你按Ctrl+C终止循环就行,或者管道会在git mergetool退出后自动关闭。

方案二:配置Git使用自动选择Modified的合并工具

如果你不想每次都敲循环脚本,可以自定义一个简单的合并工具脚本,让Git自动帮你选modified版本:

  1. 先创建一个PowerShell脚本,比如auto-choose-modified.ps1,内容如下:
param($base, $local, $remote, $merged)

# 判断哪个版本是modified的:本地文件存在就用local,否则用remote
if (Test-Path $local) {
    Copy-Item $local $merged
} else {
    Copy-Item $remote $merged
}
exit 0

这个脚本会检查本地版本是否存在(如果是「本地删除/远端修改」的场景,本地文件会不存在),然后把存在的modified版本复制到合并后的文件里。

  1. 接着在Git里配置这个自定义工具:
git config --global mergetool.autochoose.cmd 'powershell -ExecutionPolicy Bypass -File "C:\实际路径\auto-choose-modified.ps1" $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.autochoose.trustExitCode true

记得把C:\实际路径\auto-choose-modified.ps1换成你脚本的真实路径。

  1. 之后处理冲突时直接用这个工具就行:
git mergetool --tool=autochoose

这样Git会自动处理所有冲突,完全不需要交互,直接选择modified版本。

补充说明

对于那种「Deleted merge conflict for 'xxx': {local}: deleted {remote}: modified file」的提示,方案一的循环输入m也能自动搞定,因为Git的提示里m对应的就是保留修改后的文件,不管这个版本来自本地还是远端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:37:30