git – cherry-pick – HOWTO / WHYTO

问题:你想testing一个人开发的function,但它只存在于一个远远过时的远程分支中。

资源

  1. 樱桃怎么解决问题?
  2. 为什么我不使用git am或者git apply?

问题:你想testing一个人开发的function,但它只存在于一个远远过时的远程分支中。

如果你合并或重组,你会得到一堆旧的变化,可能是冲突。

用樱桃采摘,你采取一个变更集,并重新作为一个新的提交在另一个分支。

如果你只想把一个提交到另一个分支,而没有它的历史logging,这很有用。

使用-x选项很有用,所以提交消息包含一个从哪里摘樱桃的笔记。

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

因为git apply是用于应用补丁(文件),而git是用于应用一系列补丁。 git cherry-pick应用提交 – 即从您自己的回购提交,并提交您从其他回购import。

git help cherry-pick

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

[…]

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

所以,当你cherry-pick一个提交时, git会接受这个提交的更改( diff ),并尝试将它应用到你当前的工作目录,创build一个与你正在cherry-pick提交相同的新提交。

这是在另一个历史logging行上重新执行另一个提交更改的方法。

除了采取这些变化之外, cherry-pick还保留原作者的信息,如作者和那个。

最后, cherry-pick可以接受一组提交申请,在这种情况下,它将按照时间顺序(年龄大一)逐一cherry-pick它们。

问题:
你想要testing一个人开发的function,但是它只存在于一个远远落后的远程分支中。

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

  • 你不想合并旧的分支,包括在你现在的开发状态中不再相关的提交
  • 你不想为了得到那个提交而改变你的分支在一个旧的分支之上。
  • 您不必将您的分支合并回该旧的分支

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

另一个缺点是,你是樱桃采摘的提交可能有function的依赖关系基于以前提交(的旧分支)。
换句话说,它的代码仅仅是因为其他旧的提交代码(没有被选中)。
这可能会更棘手的检测。