- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我们团队的工作方式如下:
master
分支,它不稳定 - 每天都会被推送到那里;对于稳定版本,我们使用标签(为了开发,我们在 GitHub 上使用私有(private)分支)问题是,同时修复 master 和旧分支上的 bug 的最佳策略是什么?
我可以想到两个主要策略:
修复 master
上的错误,然后 checkout v1.2.4
,然后 cherry-pick 适当的提交(假设错误修复是一个始终持有的提交)并将生成的提交标记为 v1.2.4A
。
checkout v1.2.4
,修复错误并提交,将提交标记为 v1.2.4A
,并将其 merge 到 master
,执行 merge 。
我更倾向于第一个版本(cherry-picking),但我想听听其他人对优缺点的评论。
当然,当中间的提交引入一些重大更改时,事情会变得复杂,这些更改可能导致无法创建在 1.2.4 和 master 中都有效的提交 (例如,当某些函数名称更改或更复杂的事情时)。但更常见的情况是可以毫无问题地移植修复程序。
从大师那里 cherry-pick 的优势:
我认为 cherry-pick 后的历史更“可食用”。考虑一下:
| <- bugfix done on master
|
|
| <- v1.2.7
...
|
|
|
|
|
|
|
|
|
| - <- v.1.2.4A (cherry-picked from master)
| /
| <- v1.2.4
对比这个:
| <- bugfix merged to master
|\
| \
| |
| | <- v1.2.7
...
| |
| |
| |
| |
| |
| |
| |
| |
| |
| - <- v.1.2.4A (direct bugfix)
| /
| <- v1.2.4
想想中间有几十次提交。考虑像这样并行应用多个补丁。一半的屏幕会被污染。
假设我在 v1.2.4
上修复了一个问题,但几天后有人要求我提供 v1.2.3
上的补丁。 Cherry-pick 是最明智的做法。
在我们的案例中,是否有任何我忽略的 merge 优势?我可以理解它比 cherry-picking 更好地保留了两个提交之间的联系,但我们保留了一份发布文档,所有这些也都在那里进行了跟踪。
最佳答案
在我参与的开源项目中,共识似乎是修复应该首先登陆 master,在那里进行测试,然后才向后移植到旧版本。您可以在 Linux 内核如何执行稳定版本中看到这一点,例如:开发人员为主线提交补丁,但也提名它们包含在稳定版本中。
在这种情况下进行挑选时,您可能希望使用 -x
标志:
When recording the commit, append a line that says "(cherry picked from commit ...)" to the original commit message in order to indicate which commit this change was cherry-picked from. This is done only for cherry picks without conflicts. ... [If] you are cherry-picking between two publicly visible branches (e.g. backporting a fix to a maintenance branch for an older release from a development branch), adding this information can be useful.
关于Git 将错误修复反向移植到旧分支的策略(cherry-pick vs. merge),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275223/
有什么区别 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
我是一名优秀的程序员,十分优秀!