Git - 如果我想拥有一致的工作流程,那么挑选是一种不好的做法吗? [关闭]

2024-01-11

I find cherry-pick在某些情况下特别有用,例如,当我有一个feature1分支,以及一个test-feature1分支,我想应用测试中发现的更正;或者另一种方式,我想测试新功能,为此我需要测试分支中的这些新功能。

优点cherry-pick这里是我可以选择我想要在其他分支应用的具体更改;也许合并整个分支并不有趣。

我在过去的项目中一直使用这种方法,但我认为这种做法会导致工作流程不一致。是cherry-pick- 不推荐且可以避免的做法?


Using git cherry-pick这并不是一个坏习惯。你用它做什么可能是也可能不是。对于很多事情来说都是如此。是git push -f --no-verify origin master坏的?如果您不小心或不知道自己在做什么,它可能会挽救您的生命或给您带来麻烦。

以下工作流程并不少见:

您在develop分支,两周后您向 beta 测试人员发布代码。两周后,如果没有任何进展,您可以将测试版升级为生产版:

     develop --a--b--c--d
                         \
release-beta -------------d'
                           \
release-prod ---------------d''

这种情况一直持续下去,直到有一天在生产中发现一个问题……幸运的是,提交了f在你的develop分支会修复它。

您有几个选择:

你可以合并develop into release-beta,快速跟踪 Beta 测试周期并立即发布到生产环境。问题是您可能会也可能不会过早地发布代码。您的 Beta 测试人员可能没有机会发现一些讨厌的错误。

或者你可以直接挑选frelease-prod分支,运行测试并发布到生产环境(如果您对结果感到满意):

                              +---- hot fix
                              |
                              v
     develop --a--b--c--d--e--f--g
                         \     \
release-beta -------------d'    \
                           \     \
release-prod ---------------d''---f'

的诅咒(或祝福)git cherry-pick是它会暴露出你在进行小的、独立的变革单位方面做得有多好或多坏。

考虑这种情况:

// foo.js
function foo() {
  ...
}

// foo.test.js
test.todo('foo does something awesome', () => {
  // TODO
})

但是您在两次单独的提交中提交这两个文件......

123abc fix: implement foo function to fix issue in production
456fgh fix: implement tests for foo function

在一些测试框架中,.todo注释将自动使您的测试运行失败,以提醒您仍然需要实施测试...太棒了!所以你的develop分支失败,但你知道为什么。

记住那个提交f多于?事实证明它只包含代码而不包含测试......所以当你在release-prod分支没有失败...因为该提交没有引入失败的测试!

但事情变得更糟......提交f修复了一个生产问题,但又造成了另一个问题!这could如果您在一次提交中交付代码和测试,就可以避免这种情况。


以我的拙见,没有什么根本性的不良做法;您只能评估在特定情况下您的选择是什么。知道哪些是最好的来自实践和经验。没有灵丹妙药。

这可能不是您想要的答案:git cherry-pick这并不是一个坏习惯。如果您知道的话,这是一个有用的工具how and when使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git - 如果我想拥有一致的工作流程,那么挑选是一种不好的做法吗? [关闭] 的相关文章

  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • 运行“git apply”时出错

    当我尝试时 您能否告诉我如何解决 补丁不适用 错误 git 应用补丁 git apply 0001 my patch error patch failed test xml 114 error text xml patch does not
  • 无法使用 git 配置文件进行 ssh

    我知道它被问了很多次 但我无法得到我的问题的答案 我正在尝试使用配置文件 ssh 到系统 配置文件是 Host qa HostName 10 218 70 345 User user IdentityFile C Users bean ss
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • IntelliJ:查看本地和 git 提交/分支之间所有已更改文件的差异

    使用 IntelliJ 的 diff 查看器是检查代码的一种非常好的方法 因为您可以使用 IntelliJ 代码编辑器的所有功能 重构 完成等 在本地版本中进行更改 不幸的是 我还没有弄清楚当你在 IntelliJ 中进行代码审查时如何做最
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m
  • `git ls-files -s` 输出中不同字段的含义是什么?

    在 Git 中 命令返回的典型结果行git ls files s好像 100755 be2c2e9b0966253096472d4b482c458bc892e493 0 gitignore 这些字段是什么意思 不用再犹豫了git ls fi
  • 如何合并两个连续的 git 存储库

    我有一个相当独特的情况 我有一个名为 Project1 的存储库 我在其中工作了一些时间 几个月 一年后 我创建了存储库 Project1 Again 从 Project1 停止的地方开始 现在 我希望修订历史记录是连续的 因此我希望它们合
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner
  • 在 Azure DevOps 项目之间移动存储库时保留拉取请求

    我在同一帐户内有两个 Azure DevOps 项目 我想将存储库从一个项目移动到另一个项目 这一页探索如何在具有完全保真历史记录的团队项目之间移动 git 存储库 https learn microsoft com en us azure
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • Git - 如何将整个目录恢复到特定提交(删除任何添加的文件)

    我想恢复 git 中的目录 恢复其中的所有文件 并删除自该提交以来添加的所有文件 进行结账似乎只能满足我的第一个要求 但不会删除任何文件 我想出了最简单的解决方案 git rm path to dir git checkout
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我

随机推荐