作用
git cherry-pick指令的作用,就是不合并分支,选择性将某几次提交(commit)应用到其他分支
使用场景
对于多个分支的代码库,将分支代码从一个分支转移到另外一个分支是很常见的操作。这时候有两种场景:
你需要当前分支所有的代码改动,可以采用分支合并(git merge)的方式;
你只需要当前分支的某一部分代码(某几个提交),这时候可以采用git cherry-pick操作。
1.基本用法
比如现在仓库有两个分支master和dev分支,想要将dev分支的某一次或者几次commit提交应用到master分支; 首先需要切换到master分支,然后git cherry-pick commit操作
ps: 使用git log --oneline 可以查看当前分支的提交记录,查看commit
1.1合并某分支的某一次提交到其它分支
git cherry-pick commit
1.2.合并某分支的某几次提交到其它分支
多个commit使用空格分割, 最好按提交时间先后排列, 即最先提交的commit放在前面git cherry-pick commit1 commit2 ...
1.3.合并提交分支commit1到commit3之间的所有的提交到其它分支
不包含commitid1的这次提交写法:git cherry-pick commit1..commit3
包含commitid1的这次提交写法:git cherry-pick commit1^..commit3
1.4.合并该分支上最新的一次提交记录到其它分支
git cherry-pick 分支名
1.5.找回某个分支的某一次提交(在同一个分支操作)
比如说你在某一个向某个分支中添加了一个功能, 后来处于某种原因把它给删除了,然而后来某一天你又要这个功能, 这时候就可以使用cherry-pick把添加那个功能的commit, 就可以恢复
2.配置项
使用git help cherry-pick查看
git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff]
[-S[<keyid>]] <commit>…
git cherry-pick --continue
git cherry-pick --quit
git cherry-pick --abort
2.1.配置说明
-e,–edit
打开外部编辑器,编辑提交信息。
-n,–no-commit
只更新工作区和暂存区,不产生新的提交。
-x
在提交信息的末尾追加一行(cherry picked from commit …),方便以后查到这个提交是如何产生的。
-s,–signoff
在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。
-m parent-number,–mainline parent-number
如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。
-ff
如果当前HEAD与cherry-pack’ed提交的父级相同,则将执行此提交的快进。
2.2.提交冲突
- 继续执行cherry-pick
首先手动解决有冲突的文件,然后将文件重新加入暂存区(git add),然后使用如下命令继续执行git cherry-pick --continue
- 取消cherry-pick
发生代码冲突后,不想继续cherry-pick,恢复到cherry-pick前的状态git cherry-pick --abort
- 退出 cherry pick
发生代码冲突后,退出cherry-pick,代码回不到cherry-pick前的状态,一般很少用git cherry-pick --quit
3.转移到另外一个代码库
cherry pick 也支持转移另一个代码库的提交
3.1.先将该库加为远程仓库。
git remote add target git://gitUrl
3.2.将远程代码抓取到本地。
git fetch target
3.3.检查一下要从远程仓库转移的提交,获取它的哈希值。
git log target/master
3.4 使用git cherry-pick命令转移提交。
git cherry-pick <commitHash>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。