gpt4 book ai didi

git cherry-pick 没有共同历史的提交之间的差异?

转载 作者:太空狗 更新时间:2023-10-29 13:10:49 26 4
gpt4 key购买 nike

场景:一个包含完全不连贯的历史片段的存储库。例如。来自没有共同 git 历史记录的不同 Remote 。 (这通常发生在有 git subtree 的场景中。)

是否可以挑选这两个提交之间的差异,即使它们没有共同的历史记录? (并且事件提交与这两个中的任何一个都没有共同的历史记录)

我试过这个(进入带有 -X subtree=sub/dir 选项的子目录):

git cherry-pick -X subtree=vendor/package aaa/aaa..bbb/bbb

如果没有子树,这会更简单:

git cherry-pick aaa/aaa..bbb/bbb

其中 aaa/aaa 和 bbb/bbb 是两个历史记录断开的提交。

不幸的是,这不起作用:aaa/aaa..bbb/bbb 没有被读取为差异,而是其他内容。

同样可以用 git show aaa/aaa..bbb/bbb 显示,这与 git diff aaa/aaa bbb/bbb 完全不同。例如。如果两者具有相同的文件,则 git diff 将为空,但 git show a..b 将仅显示 b,而不显示 a。


注意:我个人的用例是子树背景。我提到这一点是为了避免人为的用例,在这种情况下,人们通常会开始辩论用例的有效性而不是实际问题。

理想的答案将首先解决一般情况,然后解决子树情况。

最佳答案

@VonC 指出了一个好的方向。为这个想法点赞并 +1。

it would be simpler to create a patch an apply it:

但是,这可以通过一个简单的单行代码来完成(我试过了,它对我有用):

git diff aaa/aaa bbb/bbb | git apply --directory=vendor/package

或者在非子树场景下:

git diff aaa/aaa bbb/bbb | git apply

无需 git checkout、git cherry-pick 或创建本地文件。
然后你仍然需要提交这些东西,显然..

下面是如何在不添加和/或获取任何子树 Remote 的情况下进行操作。相反,您可以将包存储库克隆到主项目存储库之外的单独目录中。

git --git-dir="/path/to/package/repo/.git" diff aaa bbb | git apply --directory=vendor/package

以我的理解,这在很大程度上仍然等同于通常的 git subtree 工作流程。我的意思是,主项目的 git 历史将是相同的。如果我错了,请纠正我。

关于git cherry-pick 没有共同历史的提交之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com