问题:您想测试某人开发的功能,但它只存在于一个过时的远程分支中。如果您合并或变基,则可能会得到一堆旧的更改,可能会产生冲突。使用cherry picking,您可以选择一个更改集,并将其作为新提交重播到另一个分支上。如果您只想将一个提交放到另一个分支上而不带有其历史记录,则这很有用。最好使用-x选项,以便提交消息包含从哪里挑选的注释。为什么不使用git am或git apply?因为git apply用于应用补丁(文件),而git am用于应用一系列补丁。git cherry-pick应用提交 - 即来自您自己的存储库的提交,而不是您从其他存储库导入的提交。
从git help cherry-pick:git-cherry-pick-应用已有提交所引入的更改.给定一个或多个现有的提交,为每个提交应用其引入的更改,记录一个新的提交。这需要你的工作树是干净的(没有来自HEAD提交的修改)。因此,当您“cherry-pick”一个提交时,“git”会获取该提交的更改(其“diff”)并尝试将其应用于当前工作目录,创建一个等同于正在进行“cherry-pick”的提交的新提交。这是一种在不同历史线上重新执行其他提交更改的方法。除了获取更改外,“cherry-pick”还保留原始提交的信息,例如作者和其他信息。最后,“cherry-pick”可以接收一组要应用的提交,此时它将像按时间顺序(从旧到新)逐个“cherry-pick”它们一样操作。
问题: 您想测试某人开发的一个功能,但它只存在于一个远程分支中,而该分支已经过时。它解决了这个问题,因为:- 您不想合并旧分支,其中包括在当前开发状态下不再相关的提交。 - 您不想将您的分支重新基于旧分支,以获取那一个提交。 - 您不必将您的分支合并回那个旧分支。最后一点很重要,因为 cherry-pick 的第一个缺点是引入了重复提交。但在您的情况下,这并不重要。另一个缺点是,您正在 cherry-pick 的提交可能基于先前提交(旧分支的提交)具有功能依赖性。换句话说,它的代码之所以能够工作,是因为其他较早提交的代码(未被 cherry-pick)。这可能更难以检测。