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

Roc*_*cky 6 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中的提交是从其他开发分支合并的,这是否可能导致此问题?

我做错了什么?

谢谢.

小智 5

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

  • 您挑选了一个提交,该提交包含 1 个文件中的 1 个更改
  • 您会注意到不仅包含在提交中的更改,还有更多的更改(主要是围绕该更改包含在内)

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

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

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


Ada*_*ruk 4

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

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

git log -p -1 <sha1-of-your-commit>
Run Code Online (Sandbox Code Playgroud)

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