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

PowerShell下git apply补丁报错No valid patches in input

问题根因

报错的核心原因是PowerShell 5.1的>重定向符默认输出编码为UTF-16 LE(带BOM),而git apply默认按UTF-8编码解析补丁文件,读取UTF-16格式的patch文件时无法识别有效补丁内容,就会抛出No valid patches in input错误。
你当前操作还有一个隐藏问题:普通git diff只会导出工作区未暂存的改动,已经执行git add暂存的内容不会被写入补丁,后续apply时会丢失这部分改动。

解决方法

你可以根据自己的需求选以下任意一种方案:

方案1:修正PowerShell重定向编码(适配原有操作流程)

在执行补丁生成命令前,先修改当前PowerShell会话的默认输出编码为UTF-8,再执行原有流程即可:

# 先设置当前会话Out-File默认编码为UTF-8
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
# 导出包含暂存+未暂存改动的补丁
git diff HEAD > test.patch
git restore .
# 执行trunk分支拉取操作
git checkout trunk
git pull
# 切回原分支应用补丁
git checkout <你的原工作分支名>
git apply test.patch
# 验证改动恢复正常后,删除临时补丁文件
Remove-Item test.patch

注意:PowerShell 5.1下指定utf8编码生成的文件带UTF-8 BOM,Git可以正常识别该格式的补丁,不会出现解析错误。

方案2:绕开PowerShell重定向,用Git原生参数生成补丁

直接使用git diff自带的--output参数指定补丁输出路径,完全不经过PowerShell的编码处理,生成的补丁为标准UTF-8无BOM格式,兼容性最好:

# 直接通过git参数输出补丁,不使用PowerShell重定向
git diff HEAD --output test.patch
# 后续操作和原有流程一致
git restore .
git checkout trunk
git pull
git checkout <你的原工作分支名>
git apply test.patch
Remove-Item test.patch

方案3:使用git stash实现需求(最稳妥的原生方案)

你需要实现的「临时保存工作区改动→切分支操作→恢复改动」流程,Git原生提供了stash命令支持,不需要手动生成、管理补丁文件,还能自动处理二进制文件、文件权限变更等普通diff无法覆盖的场景,出错概率更低:

# 保存当前工作区、暂存区的所有改动(包含未跟踪文件)
git stash push -u -m "temp save before sync trunk"
# 切到trunk拉取最新代码
git checkout trunk
git pull
# 切回原工作分支
git checkout <你的原工作分支名>
# 恢复之前保存的改动,自动删除对应的临时存储记录
git stash pop

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:57:20