2011-03-01 177 views
10

我遇到了一个情况,其中git cherry-pick X会有一些冲突,但也创建额外的插入(当与git diff验证)。git cherry-pick和git show之间有什么区别? patch -p1?

然后我重新运行git show X > my.patch,然后在我的树上做了patch -p1 < my.patch。 我得到了更好的结果,一些冲突,但结果更清晰。

git对樱桃采摘有什么特别之处?我使用git 1.7.0.4。

编辑: 通过更清洁的结果,我指的是结果树匹配更大量的git show X的结果,而git cherry-pick包含了很多代码。

+1

创建精简的测试用例非常有用。 – 2011-03-01 16:37:08

+0

我与jleedev在这里:你对差异的描述仍然很难理解。 'git show'显示你的差异,而你的树是完整的内容。它更有意义比较'git的表演X'和'混帐显示X'',其中'X''是精挑细选的版本。 'X''包含更多代码吗? – Cascabel 2011-03-02 15:34:23

回答

7

当你摘樱桃的提交,其提交使用承诺,而不仅仅是它代表DIFF的所有元数据的结果 - 你会得到原始的提交信息和作者。你的补丁管道会为你提供你想要的工作树内容,但是你必须自己提交,希望可以用git commit -c <original-commit>复制像cherry-pick那样的元数据。樱桃挑选还有一些额外的选项可能会有帮助,并且可以接受多个提交(可能指定为rev-list范围)。 patch显然不支持任何。

我不确定你的主张,结果是“更清洁”。你是否建议git应用diff的方式与patch不同?

+1

是的。我使用git-cherry-pick和patch获得的树内结果非常不同。我试图理解为什么。 – 0x6adb015 2011-03-01 16:23:00

+0

@ 0x6adb015:嗯,我不能说太多,更重要的是Git使用其自己的差异/补丁机器内部,这显然不等同于GNU diff和patch。我见过的差异,但主要的git做得更好,当修补程序不拥有尽可能多的信息,Git有访问 - 不是一般的补丁表现更好。如果你觉得Git的结果*错*,你可能需要将其报告为一个错误。 – Cascabel 2011-03-01 16:25:27

相关问题