结论: 使用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