我知道git cherry-pick和git apply terminalogies。但今天我遇到了一些问题。我正在使用两个版本的diff来应用一个补丁。我使用了以下命令:
git diff HEAD> diff.patch
git apply diff.patch
我的补丁申请失败了一个文件。
然后我只是尝试 cherry-pick commit-id2。它被成功挑选出来。
可能是什么原因?任何人都希望对此有所了解。
答案 0 :(得分:5)
两种可能性:
diff.patch
中的更改可能与commit-id2
中的更改不同,这就是为什么两者的行为不同。
git diff HEAD
显示HEAD
与当前工作目录之间的差异。 git cherry-pick commit-id2
在commit-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
。)