Git 指南
Gitcherry-pick:将提交复制到另一个分支并修复冲突
需要修复一个错误而不合并整个功能分支吗?了解cherry-pick 的工作原理、选择正确的目标、处理相关提交并在 GitTree 中直观地查看结果。
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 中进行视觉挑选
打开目标分支
查看需要修复的分支。在开始之前查看 WIP 行并提交或隐藏编辑。
检查源提交
在图中找到修复并阅读其差异。检查它是否假定目标不包含较早的更改。
选择 Cherry-Pick 提交
右键单击源提交并选择 Cherry-Pick Commit。对于多个提交,请使用 Ctrl 键单击或 Command 键单击来选择行,然后选择精选提交;在开始之前检查依赖性和顺序。
解决或中止(如果停止)
使用冲突横幅打开受影响的文件。解决并暂存结果,然后继续;选择中止放弃活动操作。
回顾新历史
检查接收分支顶部的新提交,测试受影响的行为并在推送之前再次检查分支。

下载 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日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。