Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 功能分支中的错误修复_Git_Git Branch_Branching And Merging_Feature Branch - Fatal编程技术网

Git 功能分支中的错误修复

Git 功能分支中的错误修复,git,git-branch,branching-and-merging,feature-branch,Git,Git Branch,Branching And Merging,Feature Branch,我们正在使用Vincent Driessen的分支模型。一切都很好,但我还没有真正看到有人提出什么特别的问题 据我所知,当需要一个新特性时,您需要开发分支并创建一个新的特性分支。您将处理这个问题,完成后,您将把这个分支合并到开发分支中 如果开发人员创建了一个功能,然后将该功能合并回开发,结果发现功能代码中存在一些错误,该怎么办。这个问题应该在哪里解决?新的修复/错误修复分支是否应该从开发开始并在那里修复代码?我看不到别的办法 这件事怎么办 感谢如果该功能分支是公共分支(即推送到其他人克隆/使用的

我们正在使用Vincent Driessen的分支模型。一切都很好,但我还没有真正看到有人提出什么特别的问题

据我所知,当需要一个新特性时,您需要
开发分支
并创建一个新的
特性
分支。您将处理这个问题,完成后,您将把这个分支合并到
开发
分支中

如果开发人员创建了一个功能,然后将该功能合并回
开发
,结果发现功能代码中存在一些错误,该怎么办。这个问题应该在哪里解决?新的
修复
/
错误修复
分支是否应该从开发开始并在那里修复代码?我看不到别的办法

这件事怎么办


感谢

如果该功能分支是公共分支(即推送到其他人克隆/使用的远程repo),最好创建一个新分支并隔离所述修复分支中的调试。
(而不是尝试在“
开发
”分支上重新设置“
功能
”分支的基础)

我们的想法仍然是不直接在
develope
分支中记录中间调试提交,而是只记录最终提交,这将首先修复
功能
分支合并引入的错误。

只需创建一个分支(或使用旧的、合并的
功能
分支)并在那里修复它


使用旧分支/创建新分支是一样的——你无法命名合并后的分支。

记住,模型只是一个模型——它是为了给你一个使你更高效的结构,而不是盲目地遵循一套规则。这意味着你应该自由地调整事情,找出在你的情况下什么是有效的,因为它可能不适用于所有情况

在这种情况下,我认为你有一个选择:

  • 回滚合并并继续处理要素分支,直至其就绪
  • 启动一个新分支以修复该错误
  • 您选择哪一个取决于以下因素:

    • 你的客户能看到错误吗?进行错误修复或热修复分支
    • 这个bug真的很糟糕,并且阻止了开发分支的其他进展吗?把零钱滚回去
    • 这只是一个外部影响最小的小问题吗?只需继续处理功能分支,并在准备就绪时再次合并即可
    从Git的角度来看,功能分支和错误修复分支之间的区别并不重要。仅当您将这些标签用于内部文档或其他审核目的(例如,跟踪外部用户可以看到的内容)时,这才重要

    抵制直接从开发分支开始工作的诱惑,即使你认为错误修复会很快-没有什么事情像看起来那么简单,如果出现任何问题,你会让自己头疼

    您选择的粗略视觉表现:

    怎么样?采用这种方法:

    • 不存在由于重基操作而创建断开引用的风险
    • 仅从开发分支、功能分支和任何其他可能受影响的分支的起源,您就可以知道在完成错误修复分支后应该将其合并到哪里。这是真实的,即使“功能”已经与“开发”合并了好几次,因为引入了错误
    • 如果您确定了引入bug的提交,并从中找到根,开发人员将能够知道他们需要在哪里合并bug修复分支,即使他们不熟悉repo布局
    • 您将拥有一个可以合并的分支,而不用担心引入不相关的后续更改。例如,假设有人正在开发“FeatureBeta”,这是“feature”的一个分支,在引入bug后不久就出现了分歧。他们可以轻松地引入bug修复分支,而不必担心也会引入“feature”上发生的所有其他内容
    • 这种方法减少了对cherry pick的需要,其缺点是更改了提交的名称(从而破坏了git的一个巨大优势,即对所有内容都应用一个明确的名称)

    +1000。我也认为这是最明智的做法。这将导致一个非常清晰的提交历史。另一方面,cherry picking是最不透明的方法,因为它完全隐藏了错误的引入位置和修复位置。还要注意的是,git bisect在查找引入错误的提交方面有很大帮助。明确地说,这是一种高度建议的方法。我似乎已经创建了你问题的副本,但是在我的问题中,我采取了一种提供命令的方法来创建一个实验性的repo,用于测试概念:你介意我用示例repo扩展你的问题吗,看看这些建议的答案如何实际应用到回购协议上,结果如何?