1

作用

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>


fuGUI
1.7k 声望2.5k 粉丝

The best time to plant a tree is ten years ago, and the second,let us start