跳到正文

拣选提交

Cherry-pick

高级通用

拣选提交(Cherry-pick)是把已有分支上的某个提交所做的改动,应用到当前分支,并生成一个新提交。它解决只需要部分成果、不想把整条分支都合进来的问题,比如先把修复登录错误的提交放进发布分支。

你可能会说:「另一个分支里只有登录修复能先上线,其他功能还没做完,能只拿那次修改过来吗?」

读之前建议先了解(这是一个高级概念)

动手看看

release/1.2当前所在 HEADfeature/account初始化项目登录页上线release/1.2 · HEAD
1

登录页已经上线,release/1.2 准备发布。两条分支目前都从同一个提交出发。

要点

  1. 1

    挑的是提交,不是整个分支

    你先找到目标提交,再切到要接收改动的分支执行拣选。Git 会尝试把那次提交带来的改动应用到当前分支;原分支上的提交仍留在原处。

  2. 2

    落地后会产生新的提交

    即使改动内容相同,接收分支上得到的也是一个新提交,提交哈希通常不同。因为它有自己的父提交,所以不能把两个分支上的这两次提交当成同一个提交。

  3. 3

    改动能否独立落地要先看清

    如果修复依赖前面几次提交引入的代码,只拣选修复可能无法正常工作。两边改了同一处时也可能出现冲突,需要你处理后再继续,并运行相关测试。

容易混淆的地方

合并会把另一分支的改动及相关历史纳入当前分支;拣选只取指定提交的改动,在当前分支生成新提交。变基则是把一串提交重新接到另一位置,常用于调整分支的提交基础。你只是要取出一两次独立修改时,拣选更贴合目标。

什么时候用

适合用

  • 发布分支急需修复登录失败的问题,但开发分支还有未完成的注册改版,只把修复提交带过去。
  • 某次后台权限修复已在新版分支验证过,旧版维护分支也需要同一处修改。
  • AI Agent 在实验分支做了多次提交,你只认可其中一笔独立的测试修复,想放进主开发分支。

不适合用

  • 整个功能分支都已完成并准备一起进入主分支,用合并更适合,不必逐个拣选提交。
  • 只是想把当前分支尚未提交的临时改动挪到别处,先看贮藏或新建提交,而不是拣选。
  • 想取消当前分支里已经提交的错误改动,用回退提交更直接;拣选是把别处的改动拿进来。

练一练

你维护的网站要今晚发布。开发分支有三次提交:登录报错修复、会员页新布局、会员页接口调整。后两项还没验收,发布分支只需要登录修复。你会怎么做?

让 AI 帮你做

请先检查开发分支中修复登录报错的提交,以及它是否依赖其他提交。若能独立落地,就切到发布分支拣选该提交;遇到冲突先说明原因和处理方案,完成后运行登录相关测试,并告诉我新提交的哈希。

接下来学什么