git cherry-pick 小结

本文介绍了如何利用gitcherry-pick功能选择并添加已存在的commit到当前分支,包括基本用法、注意事项以及冲突解决流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。


就是对已经存在的commit 进行 再次提交

简单用法:

git cherry-pick <commit id>

注意:当执行完 cherry-pick 以后,将会 生成一个新的提交;这个新的提交的哈希值和原来的不同,但标识名 一样;

例如:
$ git checkout old_cc
$ git cherry-pick 38361a68    # 这个 38361a68 号码,位于:

 
$ git log
commit 38361a68138140827b31b72f8bbfd88b3705d77a
Author: Siwei Shen <siwei.shen@focusbeijing.com>
Date:   Sat Dec 10 00:09:44 2011 +0800


1. 如果顺利,就会正常提交。结果:

Finished one cherry-pick.
# On branch old_cc
# Your branch is ahead of 'origin/old_cc' by 3 commits.


2. 如果在cherry-pick 的过程中出现了冲突

Automatic cherry-pick failed.  After resolving the conflicts,
mark the corrected paths with 'git add <paths>' or 'git rm <paths>'
and commit the result with:

        git commit -c 15a2b6c61927e5aed6718de89ad9dafba939a90b


就跟普通的冲突一样,手工解决:
2.1 $ git status    # 看哪些文件出现冲突

both modified:      app/models/user.rb

2.2 $ vim app/models/user.rb  # 手动解决它。
2.3 $ git add app/models/user.rb

2.4 git commit -c <新的commit号码>












### 基本使用方法 `git cherry-pick` 是一个非常实用的 Git 命令,它允许将一个或多个提交从一个分支复制并应用到另一个分支上,而不需要进行整个分支的合并。这对于只想将某些特定更改而非整个分支历史引入当前工作的情况非常有用[^1]。 #### 1. 单个提交的 cherry-pick 要选取一个特定的提交,首先需要切换到目标分支,然后使用 `git cherry-pick` 命令加上提交的哈希值: ```bash git checkout <目标分支> git cherry-pick <提交哈希> ``` 例如,如果要将提交 `abc1234` 应用到当前分支: ```bash git checkout main git cherry-pick abc1234 ``` #### 2. 多个提交的 cherry-pick 如果需要选取多个提交,可以使用范围选择。例如,选取从提交 `abc1234` 到 `def5678` 的所有提交(包括这两个提交): ```bash git cherry-pick abc1234^..def5678 ``` 或者,如果你只想选取一系列连续的提交,可以使用以下命令: ```bash git cherry-pick abc1234 def5678 ``` 这将会依次应用 `abc1234` 和 `def5678` 这两个提交。 ### 处理冲突 在执行 `git cherry-pick` 操作时,可能会遇到冲突。Git 会暂停 cherry-pick 过程,让你解决冲突。解决冲突后,需要使用 `git add` 命令来标记冲突已解决,然后使用 `git cherry-pick --continue` 来继续 cherry-pick 过程[^2]。 例如: ```bash # 解决冲突后,标记冲突已解决 git add <冲突文件> # 继续 cherry-pick 过程 git cherry-pick --continue ``` 如果你决定放弃当前的 cherry-pick 操作,可以使用以下命令: ```bash git cherry-pick --abort ``` ### 高级选项 - **`--no-commit`**:应用更改但不自动提交,允许你在提交之前进一步修改更改。 ```bash git cherry-pick --no-commit abc1234 ``` - **`--edit`**:在提交时允许编辑提交信息。 ```bash git cherry-pick --edit abc1234 ``` - **`-x`**:在提交信息中自动添加原始提交的哈希值,以便追踪。 ```bash git cherry-pick -x abc1234 ``` ### 使用场景 cherry-picking 的另一个用途是采纳另一个团队成员提出的更改。假设有一个团队成员对主项目进行了更改,并建议将其用于主项目,可以在审核后进行 cherry-picking。它是一个方便的工具,用于团队协作。在修复错误的情况下是必需的,因为错误通常在开发分支中进行修复和测试。它主要用于撤销更改和恢复丢失的提交。通过使用 `git cherry-pick` 而不是其他选项,可以避免无效的冲突。当各个分支中存在不兼容版本时,无法进行完整的分支合并时,它是一个有用的工具。`git cherry-pick` 用于访问对子分支引入的更改,而不更改分支本身[^3]。 需要注意的是,新提交不会指向其原始提交,因此不要盲目使用 cherry-pick,因为最终可能会得到同一更改的多个副本。大多数情况下,cherry-pick 要么在本地使用(以模拟交互式变基),要么将开发分支上完成的各个错误修复移植到维护分支中[^4]。 ### 示例 假设你在预生产环境(Pre-production Environment)或准生产环境(Stage Environment)进行了修复,并希望将本次提交合并到线上分支: ```bash git checkout production git cherry-pick abc1234 ``` 这样可以确保仅将修复的提交引入生产环境,而不影响其他更改[^5]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值