git am 未应用全部补丁改动,正确使用方法是什么?
补丁未完全应用的修复方案
- 先终止当前的
git am流程:执行git am --abort,回到应用该补丁前的仓库状态,清除残留的临时缓存。 - 查看补丁的完整改动:执行
git apply --stat 对应补丁文件.patch,确认补丁包含的所有改动范围,不用全量手动核对。 - 重新应用补丁:执行
git apply --reject 对应补丁文件.patch,git会自动应用所有无冲突的改动,合并不了的内容会生成后缀为.rej的拒绝文件,你只需要对照拒绝文件手动调整冲突部分即可。 - 完成提交:所有改动确认正确后,执行
git add .暂存全部修改,再执行git am --continue即可生成完整的提交。如果是批量处理多个补丁,后续会自动继续处理队列里的其他补丁。
git am 正确操作方式
git am的作用是将补丁文件转换为正规的git提交,支持单个或批量应用补丁,遇到冲突时会暂停流程等待人工处理,正确的冲突处理步骤如下:
- 启动补丁应用:单个补丁执行
git am < 补丁文件.patch,批量同目录下的补丁执行git am *.patch即可。 - 冲突发生后全面核对改动:不要只修改报错提示的冲突点,先执行
git status查看所有改动:标记为both modified的是需要手动解决的冲突文件,其他绿色暂存的是git已经自动应用的无冲突改动,也可以执行git diff确认所有待调整的内容,避免遗漏。 - 暂存所有改动:冲突修改完成后,执行
git add 所有改动过的文件(可以直接用git add .批量暂存当前目录所有改动),确保补丁包含的所有改动都被纳入暂存区。 - 继续流程:执行
git am --continue,git会基于暂存区的内容生成提交,自动沿用补丁内的提交信息,之后会自动处理队列中的下一个补丁。
注意:旧版本git的
git am --resolved命令和现在的git am --continue功能完全一致,二者没有区别。你之前出现补丁内容丢失的核心原因是手动修改冲突后,没有把git自动应用的其他改动一并纳入暂存,导致生成提交时只包含了你手动修改的部分。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

