Cherry-pick 和 patch apply 有什么区别?
What are the difference between Cherry-pick and patch apply?
我知道 git cherry-pick 和 git apply terminalogies。但是今天我遇到了一些问题。我通过使用两个修订的差异来应用一个补丁。我使用了以下命令:
git diff HEAD > diff.patch
git apply diff.patch
我有一个文件的补丁应用失败。
然后我只是尝试 cherry-pick commit-id2。采摘成功
可能是什么原因?任何人都想对此有所了解。
两种可能性:
diff.patch
中的变化可能与commit-id2
中的变化不同,这就是为什么两者表现不同的原因。
git diff HEAD
显示 HEAD
和当前工作目录之间的差异。 git cherry-pick commit-id2
应用 commit-id2
与其父级之间的差异(并使用来自 commit-id2
的元数据提交结果)。 commit-id2
与其父目录之间的差异(通常)不同于 HEAD
与当前工作目录之间的差异。
您没有像 cherry-pick
那样告诉 git apply
退回到三向合并。尝试将 --3way
(或 -3
)选项添加到 git apply
。
尝试以下操作:
git diff commit-id2^! >diff.patch
git apply -3 diff.patch
上面的行为应该像 git cherry-pick -n commit-id2
。 (有关 ^!
语法的解释,请参阅 git help revisions
。)
我知道 git cherry-pick 和 git apply terminalogies。但是今天我遇到了一些问题。我通过使用两个修订的差异来应用一个补丁。我使用了以下命令:
git diff HEAD > diff.patch
git apply diff.patch
我有一个文件的补丁应用失败。
然后我只是尝试 cherry-pick commit-id2。采摘成功
可能是什么原因?任何人都想对此有所了解。
两种可能性:
diff.patch
中的变化可能与commit-id2
中的变化不同,这就是为什么两者表现不同的原因。git diff HEAD
显示HEAD
和当前工作目录之间的差异。git cherry-pick commit-id2
应用commit-id2
与其父级之间的差异(并使用来自commit-id2
的元数据提交结果)。commit-id2
与其父目录之间的差异(通常)不同于HEAD
与当前工作目录之间的差异。您没有像
cherry-pick
那样告诉git apply
退回到三向合并。尝试将--3way
(或-3
)选项添加到git apply
。
尝试以下操作:
git diff commit-id2^! >diff.patch
git apply -3 diff.patch
上面的行为应该像 git cherry-pick -n commit-id2
。 (有关 ^!
语法的解释,请参阅 git help revisions
。)