【问题标题】:What are the differences between git cherry-pick and git show | patch -p1?git cherry-pick 和 git show 有什么区别?补丁-p1?
【发布时间】:2011-07-06 14:25:49
【问题描述】:

我遇到了一种情况,git cherry-pick X 会产生一些冲突,但也会创建额外的插入(使用 git diff 验证时)。

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

git 对cherry-picks 有什么特别之处?我使用 git 1.7.0.4。

已编辑: 通过更清晰的结果,我的意思是生成的树与git show X 的结果匹配得更多,而git cherry-pick 包含更多的代码。

【问题讨论】:

  • 创建一个精简的测试用例会非常有用。
  • 我在这里支持 jleedev:您对差异的描述仍然很难理解。 git show 向您显示差异,而您的树是全部内容。比较git show Xgit show X' 更有意义,其中X' 是精心挑选的版本。 X' 的 diff 中是否包含更多代码?

标签: git cherry-pick


【解决方案1】:

这可能会有所帮助:

http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html

这可能部分偏离主题,但正如您所见,cherry Pick 似乎以某种方式跟踪代码中的代码块,比我猜的 patch 所做的要先进得多,它可能只是按顺序解析两个代码库并排,并标出不同的线条。

【讨论】:

    【解决方案2】:

    当您选择提交时,它会使用提交的所有元数据提交结果,而不仅仅是它所代表的差异 - 您将获得原始提交消息和作者。您的补丁管道将为您提供所需的工作树内容,但随后您必须自己提交,希望使用git commit -c <original-commit> 复制像cherry-pick 那样的元数据。 Cherry-pick 还有一些可能有用的附加选项,并且可以接受多个提交(可能指定为 rev-list 范围)。 patch 显然不支持这些。

    我不确定您关于结果是否“更干净”的说法。您是否建议 git 应用差异与 patch 不同?

    【讨论】:

    • 是的。使用 git-cherry-pick 和补丁,我得到的树内结果非常不同。我试图理解为什么。
    • @0x6adb015:嗯,我只能说 git 在内部使用自己的 diff/patch 机制,而且它显然与 GNU diff 和 patch 不同。我已经看到了差异,但是当补丁没有 git 可以访问的那么多信息时,大多数情况下 git 会做得更好 - 通常补丁性能不会更好。如果您认为 git 的结果错误,您可能想将其报告为错误。
    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2021-12-09
    • 2013-11-18
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多