跳至内容
GitTree

Git 指南

Gitcherry-pick:将提交复制到另一个分支并修复冲突

需要修复一个错误而不合并整个功能分支吗?了解cherry-pick 的工作原理、选择正确的目标、处理相关提交并在 GitTree 中直观地查看结果。

撰写者 Kodmora已更新 阅读 1 分钟

Gitcherry-pick 将提交引入的更改应用到当前分支,通常会记录新的提交。切换到应接收修复的分支,检查源提交,然后运行 ​​git cherry-pick <commit>。源分支保持不变。如果补丁冲突,请解决文件并继续,或中止操作。

想象一下在 feature/checkout 上修复了一个支付错误,而发布分支只需要该修复。合并整个功能可能会带来未完成的工作。本指南展示了如何使用 Git 以及我们为 macOS、Windows 和 Linux 构建的客户端 GitTree 复制修复程序。可视化路由的额外价值是在应用更改之前检查目标分支和源差异。

Cherry-pick vs merge vs rebase:选择操作

将操作与您的目标相匹配
目标操作效果
将一个分支和它的祖先放在一起合并整合分支历史记录
在另一个基地重演发展路线变基重写重放的提交
带来选定的更改,而不需要整个分支樱桃采摘将选定的补丁应用到当前分支

Cherry-pick 对于向后移植或提交到错误分支的小修复非常有用。对于重复合并两个应该共享所有工作的分支来说,它是一个糟糕的替代品:复制的更改可能会变得难以跟踪。有关整个分支工作流程,请参阅交互式变基 和提交图指南。

如何挑选一个提交到另一个分支

从干净的工作树开始。提交或隐藏未完成的编辑; stash 指南 涵盖了暂停和恢复工作流程。如果修复是远程的,则获取,然后检查源历史记录。下面的分支名称和哈希是示例:将它们替换为现有的目标分支、源分支和实际的修复哈希。

git status
git fetch origin
git log --oneline origin/feature/checkout
git show abc1234
git switch release/2.x
git status
git cherry-pick -x abc1234
git show --stat HEAD
git status

-x 将源提交引用添加到消息中以进行干净的挑选,这有助于跟踪公共向后移植。获取更新远程跟踪参考;它不会自动更新您签出的发布分支。确认目标是您的团队期望的修订版。在推送之前检查新的提交并运行发布分支的测试。

所选提交通常具有不同的哈希值,因为其父提交元数据和其他提交元数据不同。它的原始版本保留在源分支上。复制修复不会将其从错误的分支中删除;决定如何清理该分支是一个单独的历史决策,特别是如果其他人已经使用它的话。

如何在 GitTree 中进行视觉挑选

  1. 打开目标分支

    查看需要修复的分支。在开始之前查看 WIP 行并提交或隐藏编辑。

  2. 检查源提交

    在图中找到修复并阅读其差异。检查它是否假定目标不包含较早的更改。

  3. 选择 Cherry-Pick 提交

    右键单击源提交并选择 Cherry-Pick Commit。对于多个提交,请使用 Ctrl 键单击或 Command 键单击来选择行,然后选择精选提交;在开始之前检查依赖性和顺序。

  4. 解决或中止(如果停止)

    使用冲突横幅打开受影响的文件。解决并暂存结果,然后继续;选择中止放弃活动操作。

  5. 回顾新历史

    检查接收分支顶部的新提交,测试受影响的行为并在推送之前再次检查分支。

观察图表中选择的提交、打开的菜单以及选择的 Cherry-Pick Commit。
观察图表中选择的提交、打开的菜单以及选择的 Cherry-Pick Commit。GitTree 与演示存储库的接口。

下载 GitTree 以使用可视化图表和冲突编辑器来遵循此工作流程。 Cherry-pick 包含在免费计划中,包括私人存储库。登录当前的官方应用程序,打开现有存储库并使用您已有的相同 Git 历史记录。

精挑细选多个提交和范围

git cherry-pick abc1234 def5678
# A linear range, including the first commit:
git cherry-pick "abc1234^..def5678"

这些是替代示例。显式列表按提供的顺序选择提交;将先决条件更改放在首位。范围遵循修订集规则,而不是选择您在图表中碰巧看到的行。 A..B 排除 A;当 A 有父级时,A^..B 包含 A 作为简​​单线性序列。对于初学者向后移植,更喜欢明确的、经过审查的列表,而不是交叉合并的范围。

解决选择冲突并继续

当 Git 无法应用补丁时,它会暂停。运行 git status 以识别操作和冲突路径,然后编辑预期结果。使用冲突解决指南 获取标记示例和 GitTree 三向编辑器。语法上干净的解决方案仍然需要测试:目标可能使用不同的 API。

git status
git diff --name-only --diff-filter=U
# Resolve the file, then check and stage it:
git diff --check
git add -- src/payment.ts
git diff --cached
git cherry-pick --continue

一个序列可以暂停多次,每次有问题的提交都会暂停一次。如果 Git 说该选择为空,请检查更改是否已存在或您的解决方案将其删除。仅当您故意想要省略该提交时才使用 git cherry-pick --skip;这不是一般性的冲突修复。

Git 择优选择中止、退出、跳过

主动挑选的命令
命令含义
git cherry-pick --continue解决并暂存后继续
git cherry-pick --abort取消并恢复序列前状态
git cherry-pick --skip忽略当前提交并继续序列
git cherry-pick --quit忘记操作状态,同时保留当前文件和提交

合并提交、缺少依赖项并撤消选择

合并提交需要一个主线父级,因为它表示相对于多个父级的更改。在考虑 git cherry-pick -m 1 <merge> 之前先用 git show --no-patch --pretty=raw <merge> 检查它。父项 1 并不普遍正确。 GitTree 要求您选择父级;根据你想要比较的历史来选择,而不是根据习惯。选择原始的普通修复提交通常更容易推理。

如果复制的修复程序构建不正确,请检查其先决条件:帮助程序、架构更改或配置可能存在于较早的提交中。成功的 Git 操作仅证明补丁已应用。测试接收分支。要撤消对共享历史记录的已完成选择,请恢复在目标分支上创建的新提交,而不是原始源哈希。对于未发布的工作,请在移动分支历史记录之前查看撤消 Git 错误 中的重置和恢复选择。

常见问题

樱桃选择是否移动或复制提交?

它将更改应用于当前分支,通常创建一个新的提交。它不会删除源提交或移动源分支。

我应该先去哪个分行看看?

检查目的地:应该接收更改的分支。仅在检查目标分支后才选择源提交。

为什么选择冲突?

该补丁正在应用于不同的环境。目标可能已编辑或删除相同的行,或者缺少先决条件更改。

我可以在不承诺的情况下进行挑选吗?

是的。 gitcherry-pick --no-commit 将选定的更改应用于工作树和索引,而不进行通常的提交。亲自检查并提交结果。

GitTree 中的樱桃采摘是免费的吗?

是的。免费计划还包括针对私有存储库的本地 Git 操作。当前的官方版本需要登录。

来源

有关其他产品的声明已根据其位于 2026年10月28日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。