一、 cherry-pick报错是一个合并提交但未提供-m选项的解决方法、
在feature分支上,想cherry-pick一下另一个分支上的提交,不想发生如下错误:
// 当前是在 feature 分支上
git cherry-pick commit_id
error: 提交 commit_id 是一个合并提交但未提供 -m 选项。
fatal: 拣选失败
解决方法
在原始的命令后面加上-m 1即可:
git cherry-pick commit_id -m 1
二、git中cherry-pick基本用法
git cherry-pick xxxxxx 将提交xxxxxx应用于当前分支. 在当前分支会产生一个新的提交.
例如:提交xxxxxx应用到master分支
1. git checkout master
2. git cherry-pick xxxxxx
三、cherry-pick多个提交
git cherry-pick xxxxxx yyyyyy
cherry pick 支持一次转移多个提交
git cherry-pick A..B
转移一系列的连续提交(不包含A),提交 A 必须早于提交 B,否则命令将失败,但不会报错
git cherry-pick A^..B
转移一系列的连续提交(包含A)
四、 Cherry-pick配置项
git cherry-pick 分支名 -e
-e,--edit 打开外部编辑器,编辑提交信息
git cherry-pick 分支名 -x
在提交信息的末尾追加一行(cherry picked from commit ...), 方便以后查到这个提交是如何产生的
git cherry-pick 分支名 -s
-s,--signoff 在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作
git cherry-pick 分支名 -n
-n,--no-commit 只更新工作区和暂存区,不产生新的提交
git cherry-pick -m 1 分支名
-m parent-number,--mainline parent-number
如果原始提交是一个合并节点,来自于两个分支的合并,
那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动
-m配置项告诉 Git,应该采用哪个分支的变动。参数parent-number是一个从1开始的整数
1号父分支是接受变动的分支(the branch being merged into)
2号父分支是作为变动来源的分支(the branch being merged from)
五、cherry-pick过程中代码冲突
cherry pick操作过程中发生代码冲突,Cherry pick 会停下来,让用户决定如何继续操作
1. 用户解决代码冲突;
2. git add .(将修改的文件重新加入暂存区)
3. git cherry-pick --continue (让 cherry pick 过程继续执行)
git cherry-pick --abort
发生代码冲突后,放弃合并,回到操作前的样子
git cherry-pick --quit
发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子
六、Cherry-pick到另一个代码库
git remote add target git@github.xxxxxx/testGit.git添加了一个远程仓库targetgit fetch target远程代码抓取到本地git log target/master获取要从远程仓库转移的提交,获取它的哈希值commitHashgit cherry-pick commitHash使用git cherry-pick命令转移提交