为什么精挑细选会导致仓库不稳定? [关闭]

2024-01-30

我不是开发人员。 在我们的一个项目中,由于很多门票需要时间才能完成,因此我们一直在挑选我们的提交,现在我们必须经常这样做。 一位开发人员告诉我,应该避免挑选,因为这会使存储库变得不稳定。 这是什么意思,它如何使回购变得不稳定?换句话说,采摘樱桃的负面后果是什么?


需要明确的是,挑选不会损害您的存储库。 Git 很擅长挑选。采摘樱桃可能会让你code不稳定。

樱桃选择基本上是将提交复制到另一个分支。仔细使用,这是一个非常有用的工具。如果使用不当,你就会复制未经测试的代码。如果您发现自己必须经常使用cherry-pick,那么您的流程可能存在一些次优的情况。


一个典型的例子是,当您有一个大型功能分支时,它也修复了一个错误。该功能需要很长时间才能完成,但您现在需要修复该错误。 (更深层次的问题是为什么该功能分支需要这么长时间?它太大了吗?可以将其分割成一系列较小的功能吗?)

你的存储库看起来像这样。

A - B - C - D - E [master]
     \
      1 - 2 - bugfix - 3 - 4 - 5 [feature]

接下来发生的事情取决于您的工作流程。你could樱桃直接摘下来master.

git cherry-pick bugfix

A - B - C - D - E [master]
     \
      1 - 2 - bugfix - 3 - 4 - 5 [feature]

这存在将未经测试的代码直接提交到的所有问题master。这可能取决于其他一些部分feature。这可能行不通。它可能会引入更多微妙的错误。它可能不完整。这可能就是他们所说的“使代码不稳定”。


更好的是遵循“功能分支”工作流程 https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow。没有直接承诺master被允许。一切都必须在一个分支中完成。分支在合并之前要经过质量检查。这确保了master始终保持在已知的良好状态,没有人共享未经测试的低质量代码。

您将打开一个新分支来修复错误,然后将其挑选出来。

git checkout -b fix/bug
git cherry-pick bugfix

                  bugfix' [fix/bug]
                 /
A - B - C - D - E [master]
     \
      1 - 2 - bugfix - 3 - 4 - 5 [feature]

Then fix/bug通过正常的 QA 流程运行。任何问题都已解决。当它通过 QA 时,它会被合并到master。假设出现了问题,所以还有另一个提交。

git checkout master
git merge fix/bug
git branch -d fix/bug

                  bugfix' - F
                 /           \
A - B - C - D - E ----------- G [master]
     \
      1 - 2 - bugfix - 3 - 4 - 5 [feature]

Now feature应该从master以确保它具有完整的错误修复。错误修复的 master 版本与其自己的版本之间可能存在冲突。像平常一样修复它们。

git checkout feature
git merge master

                  bugfix' ---- F
                 /              \
A - B - C - D - E -------------- * [master]
     \                            \ 
      1 - 2 - bugfix - 3 - 4 - 5 - * [feature]

然后一次feature完成后可以合并到master像平常一样。 Git 并不关心历史记录中有两个版本的错误修复,任何问题都已在更新合并中得到解决。

git checkout master
git merge feature
git branch -d feature

                  bugfix' ---- F
                 /              \
A - B - C - D - E -------------- * --------- * [master]
     \                            \         /
      1 - 2 - bugfix - 3 - 4 - 5 - * - 6 - 7

旁注:如果您使用的是合并而不是合并rebase为了更新你的分支,我倾向于,Git 甚至可能完全删除错误修复提交(如果它认为它是多余的)。

git checkout feature
git rebase master

                  bugfix' - F
                 /           \
A - B - C - D - E --------- - * [master]
                               \
                                1 - 2 - 3 - 4 - 5 [feature]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么精挑细选会导致仓库不稳定? [关闭] 的相关文章

  • 获取 GitHub 问题的管道价值?

    我使用 ZenHub 来管理 GitHub 上的问题 当我查看问题的详细信息时 我可以在 GitHub 中看到属性 pipeline 这正是保存问题的列 Now I want to get the pipeline information
  • 如何正确使用“mvn release:prepare”?

    我尝试了这个命令 用dryrun在我的 Maven 项目上进行测试 mvn release clean release prepare DdryRun true DgenerateBackupPoms false Dtag solocal
  • Haskell Stack 从 github 安装包依赖项

    是否可以使用 Haskell 堆栈从 github 安装软件包的版本 例如在一个 cabal or a stack yaml文件 如何在 git repo branch revision 上指向依赖项 对于堆栈 The 的文档stack y
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • Git:发送电子邮件而不提交

    我有一个项目 我做了更改 并想使用 git send email 功能将它们发送给另一个用户 我发现它可以通过发送补丁来工作 由git format patch每次提交 是否可以只发送diff的 我不想先提交 然后发送补丁 是否有gitfo
  • 丢失了我在 GIT 中的提交。你会不小心删除提交吗?

    我正在使用 git gui 但看不到我的分支 我知道我今天检查了一些东西 在完成提交并使用分支查看器验证后 我更改为较早的分支 我对之前的分支进行了更改 然后想返回到当前的分支 但我再也看不到它了 任何帮助都会很棒 回答你的问题 在大多数情
  • git 匹配多个单词的标签

    我们可以得到最后一个 git 标签 它以一个单词 例如 TEST 开头 如下所示 git describe tag dirty match TEST 我想知道如何获得最后一个以 word1 开头的标签orword2 例如测试OR跑步 我尝试
  • Git - 创建拉取请求而不分叉

    使用 git 已经有一段时间了 关于 git pull request 有很多教程和解释 其动机是什么等等 我遇到两种情况 1 分叉 git 仓库 我查看了一些公共 git 存储库并决定我想要做出贡献 所以我 通过以下方式创建重复的存储库F
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • git 认为文件已更改

    我在一台机器上对一个项目做了一些工作 然后推送到 github 在另一台机器上克隆并做了一些工作 然后推送 然后我回到第一台机器并做了一个pull 现在 第一台机器认为项目中最初的所有文件都已更改 我试过了 git checkout f a
  • 如何使用脚本在 GitHub 上发布构建工件资产?

    我正在尝试找出一种在 GitHub 上生成构建的单命令流程 我预计要做的是运行某种命令 比如 make release make release 脚本会构建发布工件 然后以某种方式将其上传到 GitHub 然而 我对如何在 GitHub 上
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • 当 .gitattributes 中的 EOL 设置为 CRLF 时,Git diff 认为行结尾为 LF

    当我恢复对带有 Windows 行结尾的文件的更改并且 gitattributes 将 EOL 定义为 CRLF 时 git 认为行结尾已更改为 LR 即使十六进制编辑器显示 CRLF 仅当 gitattributes 定义 EOL 字符时
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • 自定义 SSH 端口上的 Git

    我的 VPS 提供商建议我将 SSH 端口保留为他们默认分配的自定义端口号 不是 22 问题是 虽然我知道我可以在创建远程配置时提供端口号 但在进行 Git 克隆时似乎无法提供相同的操作 我在用gitolite https wiki arc
  • 如何使用 GitHub GraphQL API 查看问题已在项目的列之间转移?

    我想确定卡片何时从一列移动到另一列GitHub 项目板 https help github com articles about project boards 使用 GitHub GraphQL API 我可以在项目板中列出所有问题 例如
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft

随机推荐

  • 向 Sql Server 发送空参数

    我有一个SqlCommand我用来更新数据库表的对象 但它不能正确解释我的空值 这是 SQL UPDATE dbo tbl SET param1 param1 param2 param2 param3 param3 param4 param
  • 更改 kableExtra 表标题的字体大小

    我正在尝试更改下表中各种标题的字体大小 library knitr library kableExtra dt lt mtcars 1 5 1 6 kable dt gt kable styling c striped bordered g
  • 仅在特定页面上执行js的最佳方法

    我想知道仅在特定页面上执行 java 脚本代码的最佳方法是什么 假设我们有一个基于模板的网站 内容集重写规则 可用 jquery 它基本上如下所示 include content 内容 信息 包含一个按钮 我们希望单击时发生一些事情 内容
  • Google Play 错误代码“-504”

    我一次又一次地面临着 Google Play 的恼人问题 有一些应用程序 当前是 Deezer 和 Teamtreehouse 由于此错误而无法更新 安装 无法安装应用程序 错误代码 504 仅供参考 这不是 504 而是负 504 错误
  • SVG 元素上的多个动画

    如果我有单个 SVG 元素和与其相关的多个动画元素 哪个动画将首先执行并在 SVG 上生效 示例代码
  • Spring Batch错误(作业实例已存在)且RunIdIncrementer仅生成一次

    我正在使用 Spring Batch 和 Quartz 从数据库表中读取数据并写入另一个表中 数据库是Oracle 它是c3p0 问题是每个作业必须有一个唯一的参数 我尝试过运行ID增量器 http docs spring io sprin
  • 在java中用换行符替换逗号

    我的要求是用换行符替换字符串中的所有逗号 Example AA BB CC 应表示为 AA BB CC 这是我用换行符替换逗号的实现 public String getFormattedEmails String emailList Lis
  • 如何重绘 RGraph SVG 线图?

    我有一个嵌入在微控制器上的简单网络服务器 其中一个网页允许用户绘制捕获的数据 CSV 格式 该页面首先加载所有数据并将其呈现给用户 但随后我希望允许用户执行诸如选择和取消选择数据 列 更改线条颜色和更改数据比例之类的操作 当我天真地第二次调
  • 如何在更新 ViewModel 属性时数据触发动画?

    我有以下 DataGrid 单元格 我想在基础颜色出现后立即为其背景颜色设置动画LastTradePrice财产改变其价值
  • 在“-u”模式下处理 bash 空数组的可靠的独立于版本的 (3.2 .. 4.4) 方式

    虽然建议的解决方案使用 set u 进行 Bash 空数组扩展 https stackoverflow com questions 7577052 bash empty array expansion with set u对我来说效果很好
  • ASPNET 成员资格提供程序表和自定义成员资格表之间的关系

    我不久前经历了一个自定义配置文件提供程序示例 我是 现在重新审视它 我的数据库包含运行 aspnet 注册时创建的所有 dbo aspnet 表 向导 在这些表中 我有 aspnet Profile 它有一个指向 aspnet Users
  • 为什么使用 pyqt 时 PyCharm 中的 python 控制台不显示任何错误消息? [复制]

    这个问题在这里已经有答案了 我的一些使用 pyqt5 的代码遇到了一些问题 当我的 Qt 类出现问题时 控制台不会记录有关崩溃发生原因的任何信息 例如使用以下代码 rom PyQt5 QtGui import from PyQt5 QtCo
  • UIScrollView 未正确更新和显示

    我有问题UIscrollView 这就是我所做的 每当用户通过相机胶卷选择图像 多个或单个 时Imagepicker 我想将它显示在我的 UIScrollView 中 我能够显示它 但是当我转到Imagepicker再次然后再次选择图像 它
  • SwiftUI 中的自定义模式转换

    我正在尝试使用以下命令重新创建 iOS 11 12 App StoreSwiftUI 让我们想象一下 故事 是点击卡片时显示的视图 我已经完成了卡片 但我现在遇到的问题是如何制作动画来显示 故事 由于我不擅长解释 这里有一个 gif Gif
  • 以编程方式将 YouTube 视频添加到墙贴

    如何在 Facebook 墙中嵌入 YouTube 视频 我尝试使用 源 成员传递视频网址 但没有成功 在检查手动发布的提要的 json 后 我发现 FB 的服务器代码进行了一些处理来实现这一点 提要向我展示了这一点 id 10000146
  • 有没有纯Python的Lucene?

    红宝石人有Ferret https github com dbalmain ferret 有人知道 Python 有类似的计划吗 我们目前使用 PyLucene 但我想研究转向纯 Python 搜索 Whoosh http pypi pyt
  • 将哈希中的一个匹配值替换为另一个值

    我有一个哈希数组 arr key1 gt one key2 gt two key3 gt three key1 gt four key2 gt five key3 gt six key1 gt seven key2 gt eight key
  • 在 pandas 中将月份从数字重命名为名称

    我有以下数据框 High Low Open Close Volume Adj Close year pct day month day 1 1 NaN NaN NaN NaN NaN NaN 2010 0 0 000000 2 7869 8
  • 如何获取 UI 元素的屏幕位置?

    我正在尝试获取 UI 元素的全局位置 我尝试了很多不同的方法来获得这个职位 但似乎都不起作用 问题出在锚点上 因为我移动它们而不是 UI 元素位置本身 出于分辨率目的 检查器中显示的 UI 位置始终为 0 0 0 我还尝试让anchored
  • 为什么精挑细选会导致仓库不稳定? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我不是开发人员 在我们的一个项目中 由于很多门票需要时间才能完成 因此我们一直在挑选我们的提交 现在我们必须经常这样做 一位开发人员告诉我