9

问题:您想测试某人开发的功能,但它只存在于一个已经过时的远程分支中。

资源

  1. 樱桃采摘如何解决问题?
  2. 为什么我不使用 git am 或 git apply?
4

3 回答 3

6

问题:您想测试某人开发的功能,但它只存在于一个已经过时的远程分支中。

如果您合并或重新定位,您会得到一堆旧的更改,可能是冲突的。

通过挑选樱桃,您可以获取一个更改集,并将其作为新提交重播到另一个分支。

如果您只想将一个提交到另一个分支而不需要其历史记录,这将很有用。

使用该-x选项很有用,因此提交消息包含一个注释,它是从中挑选出来的。

为什么我不使用 git am 或 git apply?

因为 git apply 用于应用补丁(文件),而 git am 用于应用一系列补丁。git cherry-pick 应用提交 - 即,来自您自己的存储库的提交,与您从其他存储库导入的提交。

于 2012-11-23T03:22:00.717 回答
4

来自git help cherry-pick

git-cherry-pick - 应用一些现有提交引入的更改

[...]

给定一个或多个现有提交,应用每个引入的更改,并为每个提交记录一个新的提交。这要求您的工作树是干净的(不修改 HEAD 提交)。

因此,当您cherry-pick提交时,git接受该提交的更改(它的diff)并尝试将其应用于您当前的工作目录,创建一个与您正在执行的提交等效的新提交cherry-pick

这是一种在不同的历史行上重新进行另一个提交更改的方法。

除了进行更改之外,cherry-pick还保留原始提交的信息,如作者等。

最后,cherry-pick可以接收一组要应用的提交,在这种情况下,它会按照cherry-pick时间顺序(较旧的在前)一个接一个地处理它们。

于 2012-11-23T03:24:35.540 回答
1

问题:
您想测试某人开发的功能,但它只存在于一个已经过时的远程分支中。

它解决了这个问题,因为:

  • 您不想合并旧分支,包括与您当前的开发状态不再相关的提交
  • 你不想为了获得那个提交而在旧分支之上重新设置你的分支。
  • 您不必将分支合并回那个旧分支

最后一点很重要,因为挑选樱桃的第一个缺点是它引入了重复提交。但在你的情况下,这并不重要。

另一个缺点是您选择的提交可能具有基于先前提交(该旧分支的)的功能依赖关系。
换句话说,它的代码之所以有效,只是因为其他较旧提交的其他代码(不是精选的)。
这可能更难以检测。

于 2012-11-23T07:07:09.653 回答