我这里有2个分支,比如branch1和branch2。 branch1中添加了许多新功能,branch2是稳定的。今天,我想将branch1中的1个功能合并到branch2。所以,我只是运行git cherry-pick <commit-for-feature1-in-branch1
。我想只有<commit-for-featur1-in-branch1
中的更改才会合并到branch2中。但我发现其他功能还有更多变化。
我认为它只会为指定的提交获取差异,对吧?
仅供参考,branch1中的提交是从其他开发分支合并的,这是否可能导致此问题?
我做错了什么?
感谢。
答案 0 :(得分:3)
git cherry-pick
所做的是你指定的提交需要什么,并读取它与它的父级之间的差异。这有效地制作了补丁。然后它将此补丁应用于您当前签出的分支。
在您的情况下,提交包含其他功能的添加。您可以通过查看此提交将使用git log
生成的修补程序,仔细检查提交消息是否与您认为的功能相对应:
git log -p -1 <sha1-of-your-commit>
-p
告诉日志不仅显示提交信息,如作者,日期和提交消息,还包括提交引入的补丁(或差异)。 -1
选项告诉git log在1次提交后停止列出历史记录。
答案 1 :(得分:1)
我也遇到过这种行为......我已经将其追溯到以下解释,但也许有人会澄清这一点:
这是因为提交的更改取决于之前的更改。所以这个代码区域在你想要樱桃选择的目标分支创建后多次更改。
Git回溯历史,直到樱桃选择源与目标匹配,并根据此修订版创建补丁。这就是为什么会出现更多变化......
我发现这种行为有点可怕,因为人们会期望只选择给定提交哈希的更改