> For the complete documentation index, see [llms.txt](https://yanghaiji.gitbook.io/advanced-books/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yanghaiji.gitbook.io/advanced-books/note/git/senior/cherrypick.md).

# Git 高级操作

## Chery-pick

* 什么情况下会使用到 cherry-pick

对于多分支的代码库，将代码从一个分支转移到另一个分支是常见需求。

这时分两种情况: 一种情况是，你需要另一个分支的所有代码变动，那么就采用合并（git merge）。 另一种情况是，你只需要部分代码变动（某几个提交），这时可以采用 Cherry pick

* 使用

```
 git cherry-pick <commitHash>
```

这里的commitHash值得是提交的commit id

![commitId](https://735524062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MRbj3eYUlD_MfAN3jI9%2Fuploads%2Fgit-blob-cb5235baf9d4521b6173807114d5424b7e20b45f%2FcommitId.png?alt=media)

* 举例 举例来说，代码仓库有master和feature两个分支。

```
    a - b - c - d   Master
         \
           e - f - g Feature
```

现在将提交f应用到master分支。

```
# 切换到 master 分支
$ git checkout master

# Cherry pick 操作
$ git cherry-pick f
```

合并完之后的效果

```java
    a - b - c - d - f   Master
         \
           e - f - g Feature
```

当然git cherry pick 也支持同时合并多个提交

> git cherry-pick

由于大家开发使用的都是工具，这里以小编使用的IDEA 为例进行操作 首先还是进行git check out

这次我们将 `git_senior` 分支 的三次提交合并到 `master`分支

![gitCherryPick](https://735524062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MRbj3eYUlD_MfAN3jI9%2Fuploads%2Fgit-blob-498e4db9ee8362866af11ef14eed6270b230ad85%2FgitCherryPick.png?alt=media) ![CherryPick](https://735524062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MRbj3eYUlD_MfAN3jI9%2Fuploads%2Fgit-blob-abd48397750271672232f1acb86bca58eb279b76%2FCherryPick.png?alt=media) ![cherryPickData](https://735524062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MRbj3eYUlD_MfAN3jI9%2Fuploads%2Fgit-blob-33940f8a3a9c6cacbecb6f18c8656590ab617f48%2FcherryPickData.png?alt=media)
