Cherry-pick和patch适用有什么区别?

时间:2015-05-12 17:47:24

标签: git git-cherry-pick

我知道git cherry-pick和git apply terminalogies。但今天我遇到了一些问题。我正在使用两个版本的diff来应用一个补丁。我使用了以下命令:

  

git diff HEAD> diff.patch

     

git apply diff.patch

我的补丁申请失败了一个文件。

然后我只是尝试 cherry-pick commit-id2。它被成功挑选出来。

可能是什么原因?任何人都希望对此有所了解。

1 个答案:

答案 0 :(得分:5)

两种可能性:

  • diff.patch中的更改可能与commit-id2中的更改不同,这就是为什么两者的行为不同。

    git diff HEAD显示HEAD与当前工作目录之间的差异。 git cherry-pick commit-id2commit-id2及其父项之间应用差异(并使用commit-id2中的元数据提交结果)。 commit-id2与其父项之间的差异(通常)与HEAD与当前工作目录之间的差异相同。

  • 您没有告诉git apply回退到像cherry-pick那样的3向合并。尝试将--3way(或-3)选项添加到git apply

尝试以下方法:

git diff commit-id2^! >diff.patch
git apply -3 diff.patch

上述内容应与git cherry-pick -n commit-id2相同。 (有关^!语法的说明,请参阅git help revisions。)