git cherry-pick

git cherry-pick 命令

挑选部分的commit来提交的指令

  • 挑选一个commit-id合并:

    git cherry-pick commit-id

  • 挑选多个commit-id合并:

    git cherry-pick commit-idA commit-idB

  • 挑选连续的多个commit-id合并

    git cherry-pick commit-idA..commit-idB

    该指令是将从commit-idA开始到commit-idB之间的所有commit-id提交记录都合并过来,需要注意的是,commit-idA必须比commit-idB提前提交,也就是说在被挑选的分支上,先有的commit-idA,然后才有的commit-idB。不包括commit-idA,若需要包含提交commit-idA,可以用:

    git cherry-pick commit-idA^..commit-idB

合并冲突的情况:

  1. 第一种操作:继续合并--continue

    • 人为解决冲突文件,然后提交到暂存区

      git add.

    • 使用命令继续执行

      git cherry-pick --continue

  2. 第二种操作:放弃合并,回归原始状态--abort

    • git cherry-pick --abort

  3. 第三种操作:放弃合并,保留车祸现场状态--quit

    • git cherry-pick --quit

分支转移提交命令,将指定的提交应用于其他分支

git cherry-pick < commitHash >

可以将指定的提交commitHash,应用于当前分支,这会在当前分支产生一个新的提交,哈希值也不一样

git cherry-pick命令的参数,不一定是提交的哈希值分支名也是可以的,表示转移该分支的最新提交:

git cherry-pick feature (将feature分支的最近一次提交,转移到当前分支)

应用:

在开发中,我不小心将代码写到了uat分支并提交了,而不是自己创建的分支,这个时候就可以使用git cherry-pick来转移提交

  1. 首先,使用git log来查看历次提交,可得到提交错误的流程的哈希值(在uat分支)

  2. 切回本地分支,执行git cherry-pick 11ec8a081b65307396305f3932b6eb75b378924b(哈希值)命令,可以把提交错误的分支应用于本地提交

### Git Cherry-Pick 的基本概念 `git cherry-pick` 是一种用于将单个或多个特定提交应用到当前分支的操作工具。它允许开发者从其他分支挑选某些提交并将其应用于另一个分支,而无需合并整个分支。 通过 `git cherry-pick` 命令可以实现以下功能: - 将某个分支中的单独提交引入到另一分支中。 - 解决跨分支开发时的代码同步需求。 此操作的核心在于指定要复制的具体提交哈希值(commit hash),从而仅提取该提交的内容及其更改[^5]。 --- ### 使用方法 #### 单次提交的应用 假设有一个提交记录为 `abc1234`,可以通过如下方式将其应用至当前分支: ```bash git cherry-pick abc1234 ``` 执行上述命令后,Git 会尝试重现目标提交所涉及的所有修改,并创建一个新的提交对象于当前分支上[^5]。 #### 多次连续提交的选择性应用 如果希望选取一系列连续的提交,比如从 `abc1234` 到 `def5678`,则可采用范围形式调用: ```bash git cherry-pick abc1234..def5678 ``` 注意这里的两个点号表示包含起始不包含结束;如果是三个点号,则意味着两端均被纳入考虑范围内[^5]。 对于非线性的历史结构或者复杂的场景下可能引发冲突的情况,请参阅下一节关于常见问题的部分处理办法。 --- ### 常见问题及解决方案 当运行 `cherry-pick` 过程遇到文件级别的差异无法自动解析时,会出现所谓的“merge conflict”。此时需手动编辑受影响区域直至消除矛盾之处后再继续流程: ```bash # 编辑完成后标记已解决状态 git add . # 继续完成剩余部分 git cherry-pick --continue ``` 另外,在中途决定放弃正在进行的任务时也可以随时中断过程并通过清理工作区来恢复原状: ```bash git cherry-pick --abort ``` 还有就是要注意的是,频繁使用 `cherry-pick` 可能会造成重复的历史条目累积,影响仓库整洁度以及后续维护成本增加等问题[^6]。 --- ### 示例代码展示 下面给出一个完整的例子演示如何利用 `git cherry-pick` 把远程服务器上的修复补丁快速拉取下来并集成进本地特性版本之中去。 假定存在这样的情况:远端 master 上已经包含了重要的错误修正但是尚未发布正式版;与此同时我们正在 feature-x 分支上面紧张忙碌着新特性的研发活动。为了尽早享受到这些改进成果而不必等待整体更新周期完毕,我们可以这样做: ```bash # 首先切换回主干以便定位确切位置 git checkout main git pull origin main # 查看日志找到那个关键修补程序对应的 commit id ,比如说 'a1b2c3d' git log --oneline # 跳转回到自己的专题线路 git checkout feature-x # 执行摘果子动作把那笔调整拿过来 git cherry-pick a1b2c3d ``` 这样就成功地让我们的私人项目享受到了公共主线里的最新优化进展啦! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值