git – cherry-pick – HOWTO / WHYTO
问题:你想testing一个人开发的function,但它只存在于一个远远过时的远程分支中。
资源
- 樱桃怎么解决问题?
- 为什么我不使用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的依赖关系基于以前提交(的旧分支)。
换句话说,它的代码仅仅是因为其他旧的提交代码(没有被选中)。
这可能会更棘手的检测。