解决git am会话冲突:跨仓库cherry pick提交遇报错
解决git am冲突的步骤和替代方案
别慌,我来帮你搞定这个git am的冲突问题!你遇到的报错本质是Git尝试应用补丁时,找不到足够的历史信息生成合并所需的「假祖先」,说白了就是目标仓库的文件和源提交修改的文件差异太大,没法自动合并。按下面的方法一步步来就能解决:
方法一:继续完成当前git am流程
当git am因冲突暂停时,按以下步骤操作:
- 确认冲突状态:先执行
git status,Git会清晰标记出both modified的冲突文件,明确告诉你哪些地方出了问题。 - 手动解决冲突:打开冲突文件,找到类似这样的标记:
<<<<<<< HEAD
目标仓库里的现有内容源提交里要合并的内容
commit-name-xxx
根据你的需求修改内容,删除这些冲突标记,保留最终想要的代码逻辑。 - 标记冲突已解决:执行
git add <冲突文件的完整路径>,告诉Git你已经处理好这个文件的冲突了。 - 继续应用补丁:执行
git am --continue,Git会接着完成补丁的应用流程。
如果中途你想放弃这次操作,直接执行git am --abort就能回到操作前的状态。
方法二:改用git cherry-pick(更直观的方式)
如果git am的方式容易踩坑,你可以换用更直接的cherry-pick方法,步骤更清晰:
- 在目标仓库(
/path/to/2)中添加源仓库为远程仓库:git remote add repo1 /path/to/1 - 拉取源仓库的提交历史:
git fetch repo1 - 直接cherry-pick你需要的提交:
git cherry-pick sha1 - 如果遇到冲突,同样手动解决后执行
git add <冲突文件>,再用git cherry-pick --continue继续即可。 - 后续如果不需要这个远程仓库了,执行
git remote remove repo1就能删掉它。
额外提示
要是你需要cherry-pick多个连续提交,可以用git cherry-pick sha1..shaN(注意sha1是最早的提交,shaN是最晚的提交),遇到冲突时按上面的步骤逐个解决就行。
内容的提问来源于stack exchange,提问作者MHogge
相关产品推荐
相关产品推荐

