ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

将仓库A中的部分提交迁移到仓库B中

2026/8/21 18:21:15 拓冰建站 浏览量
将仓库A中的部分提交迁移到仓库B中
结论: 使用git format-patch+git am即可实现
使用场景:

例如仓库A这里有5个提交记录,commitid1, commitid2, commitid3, commitid4,commitid5

仓库B想用仓库A中提交的代码,手动改比较慢,当改动较多的时候容易漏掉某个文件,那就可以用format-patch+am

参考网站:

git format-patch

git am

如何用:
  • 找到你想迁移的代码commitid
    比如:
    情景1,我想要迁移commitid2以后的所有提交,那么需要用commid2
    情景2,我想要迁移commitid2-commitid4的提交,那么需要记住commitid2和commitid4
  • 在仓库a中,运行
    情景1
    git format-patch commitid2 --output-directory filename
    情景2
    git format-patch commitid2..commitid4 --output-directory filename

    (output-directory  表示将补丁文件放在指定目录而不是当前文件夹中)
    ( filename是放在仓库A外面的某个空文件夹的url , 比如D盘的test文件夹,那就是D:/test)
    结果:
    在对应文件夹下生成多个补丁文件

  • 然后仓库B中执行
     

    git am -3 filename/xxx.patch

    (逐条执行,这样如果有冲突方便解决)

  • 遇到冲突会显示patch failed

    执行如下命令可以将冲突文件显示出来

    git apply --reject filename/XXX.patch

    比如一共改了四个文件a.jsx, b.jsx, c.json, d.js,
    其中a, c文件有冲突, 那么当你执行apply命令以后,
    b.jsx和d.js最新改动会加入到git中,紧挨着a.jsx和c.json文件生成xxx.rej文件
    打开xxx.rej文件,可以看到冲突的地方
    这个时候就需要你手动去a,c文件中修改冲突
    修改完
    删掉xxx.rej文件
    然后执行

    git am --resolved
    git push
如果遇到下面这种问题

 可以执行

git am --skip

然后重新  git am xxx 命令
 

当你结束git am  别忘了退出git am状态
​​​​​​​git am --abort