- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我的符号或术语有误,我深表歉意。我在我的个人项目中使用 git
有一段时间了,还没有处理过复杂的 merge 场景。我们开始在工作中使用它,并遇到了更复杂的场景。我仍然是一个 git
新手,所以我想找出 cherry-pick 的最佳实践。
场景一
在这里,我们有一个master
、fix
和develop
分支。在我们分支 fix
之后,我们将版本号更新为 1.0.1
。我们为 develop
做了同样的事情,并将版本号更改为 1.1.0
。
假设修复F1
、F2
和F3
已提交到修复
。其中,我们关心修复 F2
和 F3
,但不关心 F1
,因为它是对已弃用功能的更改。我们也不关心版本号更改为 1.0.1
。
现在我们可以毫无问题地将这些更改从fix
merge 回master
。但是,如果我想将这些更改 merge 到 develop
中怎么办?现在我正在使用 git cherry-pick
来选择 F1
和 F2
。此外,对于大量提交,我正在使用一系列提交来挑选,这似乎工作正常。这是最好的做事方式吗?
这让我想到了关于 git cherry-pick
的下一个场景:
场景二
再次,如果术语不正确,或者我的图表没有意义,我深表歉意。这是我所能描述的最好的。
所以在这种情况下,除了上面的分支之外,我们还有一个 hotfix
分支。假设有人将修补程序 H1
和 H2
提交到 hotfix
中,然后将这些更改 merge 到 master
中,修复
和开发
。
大约在同一时间,其他人提交了修复 F1
、F2
和 F3
到 fix
分支,但以交错的方式(因此 F1
在 H1
之前提交,而 H2
在 F3
之前提交。现在从事 fix
工作的人想要同步,所以他运行了一个 git pull
,它按顺序带来了这些更改。让我们假设没有冲突。
现在,假设此人想要将他的所有修复 merge 到develop
中。在这种情况下,如果他使用 git cherry-pick
进行一系列提交,从 F1
的提交开始,到 F3 的提交结束
?这些 merge 会被忽略吗?据我所知,您无法挑选 merge (因为您需要指定主线)。那么在这种情况下,git cherry-pick
会忽略这些 merge 吗?
此外,为了不必处理这种情况,总是 rebase
而不是 git pull
是否更好,这样您的更改之后应用?这样你就可以指定提交的范围,它不会包括 merge 。
谢谢,如果我的问题很愚蠢或者没有任何意义,我深表歉意。
最佳答案
场景一
Right now I am using git cherry-pick to pick out F1 and F2.
你是说 F2 和 F3,对吧?本质上是这样的:
git cherry-pick F1..F3
如果是这样,那很好。或者,您可以创建一个临时分支并对其进行 rebase :
git checkout -b for-develop F3
git rebase --onto develop F1
git checkout develop
git merge for-develop
您实际上不需要创建分支,因为您可以直接使用 SHA-1 或 reflogs,但是,我使用分支是为了简化目的。
请注意,git rebase
基本上是一个美化的 cherry-pick,所以在一天结束时它会做同样的事情。
场景二
What will happen if he used git cherry-pick with a range of commits starting at the commit for F1, and ending at the commit for F3? Would those merges be ignored?
您可以使用 --no-merges 告诉 cherry-pick 忽略 merge ,因此 merge 提交本身将被忽略(M1、M2),但不会忽略提交本身(H1、H2)。由于您已经拥有那些可能会产生一些问题的“开发”。如果实现了 git cherry-pick --skip
(我为此发送了补丁,但从未应用过),那将不是问题。
但是你可以告诉 cherry-pick 忽略已经存在的提交:
git cherry-pick --no-merges --right-only --cherry-pick develop...F3
您可以使用相同的参数尝试 git log
来查看哪些提交会被挑选出来。或者您可以自己指定它们:
git cherry-pick F2 F3
最后,你可以使用 git rebase
了:
git checkout -b for-develop F3
git rebase --onto develop F1
git checkout develop
git merge for-develop
请注意,git rebase
将执行与我在上面放置的 cherry-pick 命令相同的操作,并且您可以在两种情况下使用相同的 git rebase
命令。您还可以在两种情况下使用相同的 git cherry-pick
命令(使用 --no-merges --right-only --cherry-pick)。如果存在冲突,您可能会遇到一些麻烦,特别是如果提交变为空(很可能已经应用),因为没有 git cherry-pick --skip
。
通常使用 git rebase
更安全,因为这是每个人都在使用的,但是如果你喜欢冒险,你可以尝试一下 git cherry-pick
看看如何事实证明。
关于git - 在这些场景下使用 git cherry-pick 是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749153/
有什么区别 import { pick } from 'lodash'; 和 import pick from 'lodash/pick'; (请注意,第二个是'lodash/pick',而不仅仅是'
我试图只让祖先的一些属性暴露在我的后代上。我尝试通过Pick来实现 export class Base { public a; public b; public c; } ex
我这里有 2 个分支,比如 branch1 和 branch2。 branch1 增加了很多新功能,branch2 是稳定的。今天,我只想将 1 个功能从 branch1 merge 到 branch
我正在尝试使用 git rebase -i HEAD~19 删除提交列表。我过去曾成功地使用过此方法,但是当我尝试运行然后退出 vim 而不进行任何更改(:q!)时,我收到此错误: The previ
我正在使用网格主题并尝试完成默认为“选择尺寸”而不是product.liquid 中的“小”的自定义。 (客户看到太多来自订购默认尺寸的人的错误“小”订单)。 解决这个问题: https://docs
我想输入一个名为 pick 的函数,我知道 typescript 内置了 Pick ,现在我想实现实际的源码使用部分,但是我卡住了。 这个函数的作用是pick提供object基于给定字符串的属性并返回
我有一个用例,我认为它非常适合 Typescript 的 Pick类型。 这是一个简化的例子: interface CreditCard { name: string; year: numbe
假设我有分支 A 和 B。 A: a b c d B: a b c e 我想从分支 B 获取提交 e 并将其放在分支 A 的提交 d 下。所以我最后的结果应该是这样的 A: a b c e d 怎么做
我有两个 pandas 数据框,data1 和 data2 它们显示在图表上。我可以点击该点来显示该点的信息。但仅来自一个数据集。如何将它用于两个数据集?我还需要显示来自另一个通过索引访问数据的数组的
我是 git 的新手,我确实了解 git cherry-pick 的工作原理,但这是我的问题: 最近,我的团队中有人更改了 master 中的目录结构,但没有更改另一个分支中的目录结构。 现在,当我在
我在大学里使用 git 大约几年了,老实说,我仍然不知道自己在做什么。 我不确定我的标题是否恰本地描述了我遇到的问题,但基本上,在开发特定功能时,我已经向 master 分支提交了一堆。现在我已完成开
我有两个具有相似架构的存储库: repo1: - file1 - file2 *(this file is non-existent in repo2) - folder - file3
我一直在尝试从一个分支中挑选一个特定的提交到另一个分支。假设我的历史是这样的: A - B - C - D (master) \ X - Y (feature)
如果我将这一行用作数组,我不确定为什么会出现问题以及如何修复它: Pick[] Sandbox . 如果我使用 never 而不是条件类型,那么必填作者字段就会出现另一个问题。 Sanbox 2 沙盒
我不太了解 cherry-pick。只需要清除 cherry-pick 命令在不同分支中生成相同提交的不同哈希码?实际上,我正在挑选不同分支中的哈希码。在这里我注意到它正在生成现有提交的不同哈希码。是
picks :: [a] -> [(a, [a])] picks [] = [] picks (x:xs) = (x,xs) : [(y,x:ys)| (y,ys) <- picks xs] pick
我已经单独尝试了 Num((today()-I_TRAN_DATE)/90 + 1,0) 并且它会返回整数,但是当我尝试将它与 pick 函数结合使用时它似乎不起作用。我知道它还没有完成,但至少应该返
此问题专门针对 Minecraft,但它会影响我计算机上运行的所有 Java 程序。 似乎有什么东西强行设置了 _JAVA_OPTIONS 环境变量。当我运行我的服务器时,我已指定为其分配 4 GB
我想知道是否有办法将一个提交复制到另一个分支而不检查该分支。 例如,我有两个分支:master和 parallel_version . 我在 parallel_version分支,我在这些分支的常见文
给定以下内容: 1 1 4 2
我是一名优秀的程序员,十分优秀!