9

我这里有 2 个分支,比如 branch1 和 branch2。branch1 增加了很多新特性,branch2 是稳定的。今天,我只想将分支 1 的 1 个特性合并到分支 2。所以,我只是跑git cherry-pick <commit-for-feature1-in-branch1。我想应该只有更改<commit-for-featur1-in-branch1才会合并到branch2中。但我发现包含其他功能的更多更改。

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

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

我做错了什么吗?

谢谢。

4

2 回答 2

6

我也遇到过这种行为......我已经将其归结为以下解释,但也许有人对此进行了更多澄清:

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

这是因为提交中的更改取决于先前的更改。因此,在创建您要挑选的目标分支后,此代码区域已多次更改。

Git 会回到历史记录中,直到樱桃选择源与目标匹配并基于此修订创建补丁。这就是为什么可能会出现更多变化的原因......

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

于 2013-09-25T09:38:12.940 回答
4

它的作用是接受您git cherry-pick指定的提交并读取它与其父级之间的差异。这有效地制作了补丁。然后它将这个补丁应用到你当前签出的分支。

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

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

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

于 2011-10-18T07:01:37.430 回答