# 用 cherry-pick 选择性的跨分支更新

By [DorokGo](https://paragraph.com/@dorokgo) · 2021-12-10

---

本文主要说明 `Git` 的 `cherry-pick` 功能。

### 应用场景

如果你的应用已经发布了一个版本2.0， 代码分支叫 `release-2.0` ， 现在正在开发3.0， 代码的分支叫 `dev-3.0` 。有一天产品说， 要把正在开发的某个特性提前上线， 也就是说要把 `dev-3.0` 分支上的某些更改移到 `release-2.0` 的版本上， 那么怎么办呢？

该 `cherry-pick` 上场了， `cherry-pick` 会重演某些 `commit` ， 即把某些 `commit` 的更改重新执行一遍。

### 解决方案

那么上述问题的解决方案如下：

*   **首先**，切换到`dev-3.0`分支，敲 `git log` 命令，查找需要合并的 `commit` 记录，比如 `commitID：20c2f506d789bb9f041050dc2c1e954fa3fb6910` ；
    
*   **然后**，切换到 `release-2.0` 分支，使用 `git cherry-pick 20c2f506d789bb9f041050dc2c1e954fa3fb6910` 命令，就把该条 `commit` 记录合并到了 `release-2.0` 分支，这只是在本地合并到了 `release-2.0` 分支；
    
*   **最后**，`git push` 提交到 `release-2.0` 远程，至此，就把`dev-3.0`分支的这条 `commit` 所涉及的更改合并到了 `release-2.0` 分支。
    

另外，多个 `commit-hash` 使用空格分割， `commit-hash` 最好按提交时间先后排列， 即最先提交的commit放在前面。

例如：

    git cherry-pick  
    20c2f506d789bb9f041050dc2c1e954fa3fb6910 
    2633961a16b0dda7b767b9264662223a2874dfa9 
    5d5929eafd1b03fd4e7b6aa15a6c571fbcb3ceb4  
    

以上。

### 补充说明

`cherry-pick` 不仅可以用在不同分支之间， 还可以用在同一个分支上。 不同分支的用法如上所述. 同一分支用法也是一样的， 同一分支使用情形： 比如说你在某一个向某个分支中添加了一个功能， 后来处于某种原因把它给删除了， 然而后来某一天你又要添加上这个功能了， 这时候就可以使用cherry-pick把添加那个功能的commit， 再重演一遍。

---

*Originally published on [DorokGo](https://paragraph.com/@dorokgo/cherry-pick)*
