为什么樱桃选择更改多次提交?

时间:2011-10-18 03:57:45

标签: git cherry-pick

我这里有2个分支,比如branch1和branch2。 branch1中添加了许多新功能,branch2是稳定的。今天,我想将branch1中的1个功能合并到branch2。所以,我只是运行git cherry-pick <commit-for-feature1-in-branch1。我想只有<commit-for-featur1-in-branch1中的更改才会合并到branch2中。但我发现其他功能还有更多变化。

我认为它只会为指定的提交获取差异,对吧?

仅供参考,branch1中的提交是从其他开发分支合并的,这是否可能导致此问题?

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:3)

git cherry-pick所做的是你指定的提交需要什么,并读取它与它的父级之间的差异。这有效地制作了补丁。然后它将此补丁应用于您当前签出的分支。

在您的情况下,提交包含其他功能的添加。您可以通过查看此提交将使用git log生成的修补程序,仔细检查提交消息是否与您认为的功能相对应:

git log -p -1 <sha1-of-your-commit>

-p告诉日志不仅显示提交信息,如作者,日期和提交消息,还包括提交引入的补丁(或差异)。 -1选项告诉git log在1次提交后停止列出历史记录。

答案 1 :(得分:1)

我也遇到过这种行为......我已经将其追溯到以下解释,但也许有人会澄清这一点:

  • 你选择提交,提交包含1个文件中的1个更改
  • 您注意到,不仅包含在提交中的更改,还包含更多更改(主要包括更改)

这是因为提交的更改取决于之前的更改。所以这个代码区域在你想要樱桃选择的目标分支创建后多次更改。

Git回溯历史,直到樱桃选择源与目标匹配,并根据此修订版创建补丁。这就是为什么会出现更多变化......

我发现这种行为有点可怕,因为人们会期望只选择给定提交哈希的更改