git 跨项目合并代码(cherry-pick使用方法)
前言
在实际开发中,往往有多个项目,代码相似。想要跨项目将另一个项目某个分支,或者其中部分提交合并过来,git 提供了相应方法。本文章简单介绍通过使用 cherry-pick 合并部分代码提交。值得注意的是,cherry-pick 适用于两个仓库差异不大的情况下。
- 第一步 下载需要合并的仓库A,并切换到develop分支
$ git clone https://gitee.com/ivy/project_a.git
切换到要合并的分支(develop)
$ git checkout develop
- 第二步 获取远端需要合并的仓库B,我们将其命名为 target 仓库
$ git remote add target https://gitee.com/ivy/project_b.git
- 第三步 将远程仓库B抓取到本地
$ git fetch target
- 第四步 将仓库B的某次提交 <commitid> 合并到仓库A的develop分支上
$ git cherry-pick 5d967e1c
此时,git 可能会提示 “error: could not apply 6209f52b...” 是因为两个仓库没有取得关系
在操作命令后加上 --allow-unrelated-histories
$ git cherry-pick 5d967e1c --allow-unrelated-histories
这样就将5d967e1c的提交合并过来了,但可能有文件冲突,需要解决冲突后提交到远端
$ git push
注意:当执行完 cherry-pick 以后,将会生成一个新的提交;这个新的提交的哈希值和原来的不同,但标识名一样;
cherry-pick 常用命令命令集合:
$ git cherry-pick <commit id>
: 单独合并一个提交
$ git cherry-pick -x <commit id>
: 单独合并一个提交,且保留原提交者信息
Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick多个commit
$ git cherry-pick <commit-id1> <commit_id2>
: 合并commit_id1&commit_id2 这会产生两个新的提交
$ git cherry-pick <start-commit-id>..<end_commit_id>
: 合并从start到end区间的所有commit 注意:不包括 start_commit_id 也就是开区间(start-commit-id,end_commit_id]
$ git cherry-pick <start-commit-id>^..<end_commit_id>
: 合并从start到end区间的所有commit 包括 start_commit_id 即闭区间 [start-commit-id,end_commit_id]
致谢
作者:烟雨随风
链接:https://www.jianshu.com/p/08c3f1804b36
作者:阿凌(https://www.cnblogs.com/lfzm/)
https://www.cnblogs.com/lfzm/p/10681412.html
GitHub : https://github.com/AClumsy/ASF