- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
场景:一个包含完全不连贯的历史片段的存储库。例如。来自没有共同 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/
cherry 在 git-cherry 中是什么意思? ? 除了水果,我只在 cherry picking 表达式中看到这个词(在 git 中也有 git-cherry-pick ),这意味着有选择地
git cherry 开发功能/ABC - 1014d04c60efccb5d0b8762af1371831bb234b17 git cherry 命令正确显示提交 1014d04(标记为 -)可以在
我正在尝试使用 git rebase -i HEAD~19 删除提交列表。我过去曾成功地使用过此方法,但是当我尝试运行然后退出 vim 而不进行任何更改(:q!)时,我收到此错误: The previ
我有两个主要分支,staging 和 master。我有一些提交,我已将这些更改推送到一个分支,比如 xyz,其基础分支正在暂存,并为 staging 分支创建了 pull 请求。所有这些提交都被压缩
我正在尝试从我的主分支中挑选一批提交并将它们放入自己的分支中。我将我所有的提交哈希放在一个文件(称为 output.txt)中,我正试图将其通过管道传输到 git cherry-pick。这是我想出的
我在分支 10.57 中有某些提交,我想将其 merge 到另一个分支 10.58。 我通常会从 10.57 到 10.58 中挑选那些提交。 但是有一个小故障。某些文件在 10.58 中更改了它们的
我是 git 的新手,我确实了解 git cherry-pick 的工作原理,但这是我的问题: 最近,我的团队中有人更改了 master 中的目录结构,但没有更改另一个分支中的目录结构。 现在,当我在
据我所知,默认情况下,cherry-pick 命令接受一次提交并将其置于当前分支之上。是否可以 cherry-pick Git 中的提交并将其置于当前提交之下? 最佳答案 您始终可以在选择之后执行 r
我在大学里使用 git 大约几年了,老实说,我仍然不知道自己在做什么。 我不确定我的标题是否恰本地描述了我遇到的问题,但基本上,在开发特定功能时,我已经向 master 分支提交了一堆。现在我已完成开
我有两个具有相似架构的存储库: repo1: - file1 - file2 *(this file is non-existent in repo2) - folder - file3
我一直在尝试从一个分支中挑选一个特定的提交到另一个分支。假设我的历史是这样的: A - B - C - D (master) \ X - Y (feature)
我不太了解 cherry-pick。只需要清除 cherry-pick 命令在不同分支中生成相同提交的不同哈希码?实际上,我正在挑选不同分支中的哈希码。在这里我注意到它正在生成现有提交的不同哈希码。是
我想知道是否有办法将一个提交复制到另一个分支而不检查该分支。 例如,我有两个分支:master和 parallel_version . 我在 parallel_version分支,我在这些分支的常见文
给定以下内容: 1 1 4 2
假设,我对代码进行了许多更改,并且只需要提交其中的一些更改。 Mercurial 有没有办法做到这一点?我知道 darcs 有这样一个功能。 我知道hg移植可以在分支之间做到这一点,但我需要这样的东西
因此根据我的理解,从一个分支到另一个分支的 cherry-picking 提交会创建一个全新的哈希签名,尽管实际的代码更改是相同的。我相信这是因为提交哈希签名取决于分支名称和提交时间等。 正因为如此,
有没有办法在 Protractor/jasmine e2e 测试中挑选测试并创建套装。我知道 Protractor 在套件中接受通配符规范 (*.spec"),但我正在寻找规范文件中的几个测试并创建一
我需要将多个存储库(每个存储库都是从 TFS 转换而来) merge 为一个。为此,我使用 git cherry-pick 命令,它适用于某些提交,但不适用于其他提交: $ git status #
我的场景:我有一个分支 B,它是从分支 A 创建的。我在分支 B 中做了一些提交,我想将其挑选到分支 C(类似于 A)中。我不想将 B merge 到 C 中,因为我不想让 A 中的某些东西进入其中。
在从一个分支中挑选一些提交到另一个分支后,当稍后创建 pull 请求时我仍然看到提交。 例如,有一个 git 项目有两个分支:Dev 和 Release。 提交历史按以下顺序排列。 开发:a1、a2、
我是一名优秀的程序员,十分优秀!