需求:
如果做产品的话,你会发现有些项目之间其实是有很多共享的代码块儿的。有很多种方式可以来解决这个需求,修改代码的话,只需要修改一次。
不过我今天比较想记录一下使用git cherry-pick 的方式来把一个项目中的代码拿到另外项目里面里面去。
前提:
我们需把A项目中的部分代码移植到本项目里面去。
思路:
- 每个项目其实可以有很多个remote origin 的。如果我们可以在B项目里,设置A项目的origin url。
- 在B项目里面,把需要的branch 拉一份在本地。
- 再通过cherry-pick 的方式,找到你想要的commit 号码。
- 如果有冲突,就解决冲突就好了,完成以后,继续/提交。
具体步骤:
-
git remote -v
git remote add targetName targetUrl
比如这里,咱们可以写:
git remote add testA http://123.123.123.git
这里的targetName
其实就是给这个仓库起一个alias,你后面要操作的时候方便很多。
完成这一步以后,再次git remote -v
就能看到多了两个url ,一个fetch 一个push。
截至到这里,我们完成了思路里面的第一步
git fetch testA dev:cherry-pick-branch
这里的testA
就是你之前起的alias
dev
就是你想cherry-pick 的分支,
cherry-pick-branch
是你想把远程的代码,拉到本地的哪个分支,(一般是新起一个分支,比较干净)
git cherry-pick commitNo
这里的commitNo
就是你在项目A 里面的提交commit 号码。
$ git cherry-pick 99daed2
error: could not apply 99daed2... commit
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
如果发生冲突,就打开冲突的文件,解决冲突文件。完了之后继续git cherry-pick --continue
所有的cherry-pick 完了之后,就正常流程提交代码到B仓库里面就好了。
至此,就可以把A项目里面的内容通过cherry-pick的方式拿到了B项目。
(如有错误,烦请纠正,谢谢)