问题:
开发的时候是以master作为源分支创建的 branch, 所有的修改都提交到 master了,但是项目在打包的时候是在 develop分支打包,即要以 develop作为源头来建立分支,那么,现在要把所有提交到 master的代码,提交到 develop来打包,怎么办?
git cherry-pick: 作用是 对于多分支的代码库,将代码从一个分支转移到另一个分支?换句话说就是 就是将指定的提交(commit)应用于其他分支。
假设有2个分支:
- master a-b-c-d-e 此时master分支有多出的 d, e提交记录
- develop a-b-c
现在要将 master 多出的那 d, e提交记录,转移到 develop 分支,以便打包测试,即:
- master:a-b-c-d-e
- develop: a-b-c-d-e-f
实现:
-
先查看你本地分支的提交记录:
git log
// 查看提交的 id
-
然后从你的本地分支切换到develop
git checkout develop
- 同步多条记录到 develop
git cherry-pick did^..eid
注意:
^表示包含左边的记录 即:[did, eid] 表示连续的多条记录一并同步,
did…eid 表示不包含did这条记录,即(did, eid]
git cherry-pick 9686a0f0aab7602ae206f2ada63f7630d560a119^..6584924fbcb36817e60015ffb13569291175c505
如果要提交多个不连续的,即中间穿插有别人的提交记录:
$ git cherry-pick <hashA> <hashB>
- 执行完第三步之后一定要
git push
这样才能提交成功
如果同步错误则可以取消同步:
git cherry-pick --quit