Git cherry-pick 使用总结

本文介绍了如何使用Git的Cherry-Pick命令将指定的提交从一个分支移植到另一个分支。通过具体的例子展示了如何选择性地合并特定提交,并提供了如何在合并后手动提交更改的方法。

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

应用背景:假设现在有两个分支:dev_01, dev_02. 如果我想把dev_01分支上的某几个commit合并到dev_02分支, 那么怎么办呢?

这就是cherry-pick的工作了。cherry-pick会捡选某些commit, 即把某些commit的更改重新在另一分支上重新提交一遍. 对于我们的应用背景而言,就是把分支dev_01上某几个commit的更改在分支dev_02上再提交一遍。那么上述问题的解决方案如下:

假设我们需要将dev_01上的两个commit 合并到dev_02上,两个commit的commit id 分别如下:

  1. 20c2f506d789bb9f041050dc2c1e954fa3fb6910 
    2633961a16b0dda7b767b9264662223a2874dfa90
那我们可以这样写:
git cherry-pick  
20c2f506d789bb9f041050dc2c1e954fa3fb6910 
2633961a16b0dda7b767b9264662223a2874dfa9  

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

注意:上面这条cherry-pick命令每拣选一个commit就会提交一次生成一个新的commit id。 如果我们想让每个commit 拣选后暂缓提交,等到所有commit都拣选完成后,自己手动commit,应该怎么办呢?答案是用-n 选项:

git cherry-pick  -n
20c2f506d789bb9f041050dc2c1e954fa3fb6910 
2633961a16b0dda7b767b9264662223a2874dfa9
这样,当git cherry-up后,这两个commit上的更改就被merge到本地的dev_02分支了,此时这些更改就像是你再dev_02分支上自己手动添加的一样,注意此时这些更改并没有被提交。

执行git status 会列出这些改动。

此时,就可以按正常流程(git commit, git push)来提交改动了

### 使用 `git cherry-pick` 的详细步骤 #### 准备工作 在执行 `cherry-pick` 前,确保本地环境已经配置好 Git 并连接至对应的远程仓库。 #### 步骤一:切换到目标分支 为了将特定的提交应用到另一个分支,在此之前需先切换到该目标分支。假设要将某次提交应用于名为 `feature-branch` 的分支,则应运行如下命令: ```bash git checkout feature-branch ``` #### 步骤二:获取待挑选提交的信息 利用 `git log` 或者图形化工具查看历史记录来定位想要挑拣的具体提交 ID(SHA1 hash),比如 `abcde12345`. #### 步骤三:执行 cherry-pick 操作 一旦确认了具体的提交哈希值之后就可以使用下面这条指令来进行变更的应用: ```bash git cherry-pick abcde12345 ``` 如果遇到合并冲突的情况,Git 会暂停 `cherry-pick` 过程并提示用户解决这些冲突后再继续操作[^1]。 对于来自合并提交中的更改,应当特别注意 `-m` 参数的选择以避免不必要的麻烦或潜在的风险。例如,当处理由两个父级组成的合并提交时,可以这样指定主分支作为第一个参数传递给 `-m`选项[^4]: ```bash git cherry-pick -m1 abcde12345 ``` #### 步骤四:解决可能存在的冲突 假如出现了文件级别的差异无法自动解析的情形,开发者需要打开受影响的文档逐一修正直至所有问题都被妥善处置完毕;随后标记为已解决问题以便后续流程能够顺利推进下去: ```bash git add . ``` 最后一步就是告知 Git 已经解决了所有的冲突并且准备恢复正常的 `cherry-pick` 流程: ```bash git cherry-pick --continue ``` 如果没有发生任何冲突的话,那么整个过程将会无缝衔接地完成而无需额外干预. #### 完成后的验证 成功完成后可以通过再次查阅日志(`git log`) 来检验新引入的变化是否符合预期效果.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值