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

  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • Visual Studio Code 内置故事,用于查看 git 提交历史记录并对其内容进行比较

    In this https stackoverflow com questions 37899765 how can i view the git history in visual studio code 60013101 noredir
  • 如何解决 VS Code 中变基拉取的合并冲突?

    当我做一个git pull rebase 并且我的提交中存在合并冲突 我得到冲突差异视图 解决所有冲突并暂存文件 然后呢 我可以打开终端并运行git rebase continue但是 VS Code 中不应该有一个按钮来完成变基吗 只需使
  • 致命:无法将 HEAD 解析为有效引用

    我正进入 状态fatal Failed to resolve HEAD as a valid ref 每当我尝试承诺时 我努力了 echo ref refs heads master gt git HEAD 但它不起作用 也尝试过 git
  • Git post-receive - 如何检查推送的分支是否与主分支合并

    在我们的团队中 我们通常将所有任务推送到单独的分支中 然后发布经理审查这些分支并将它们合并到 主 分支中 有时团队成员忘记将他们的分支与主分支合并 在推送之前 所以我想做的是 在用户推送后输出一条消息 请与主分支合并 我想我需要检查一些内容
  • 您的分支比“origin/master”领先 3 个提交

    我在运行时收到以下信息git status Your branch is ahead of origin master by 3 commits 我读过其他一些帖子 解决这个问题的方法是运行git pull rebase但是 rebase
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • GitHub Pages (github.io) doxygen 生成的页面未找到 (404)

    我不明白为什么找不到 doxygen 生成的页面 404 它在Github存储库中的路径是https github com AubinMahe AubinMahe github io blob master doxygen html dd
  • 合并 BPM 图表的最佳实践

    我们在 Java 环境中使用 Alfresco 活动图 这些图是有版本的 我们确实使用 GIT 我们经常会遇到合并分支的合并冲突 解决这个问题确实很痛苦 因为我们必须比较文件的文本内容来检查差异 有时 重新应用更改比合并更轻松 是否有合并此
  • 如何停用 Xcode git 功能? (删除 git 集成)

    我的 Xcode 项目位于 git 上 但我不喜欢 Xcode git 集成 有时 我有来自 Xcode 的错误 https stackoverflow com questions 7388560 error fatal not a git
  • Smartgit:自动插入提交消息

    有没有办法使用钩子脚本在 Smartgit 中自动插入提交消息 重击 如果用户提交了他的更改 我想预加载提交消息字段 我没有看到任何SmartGit配置 http www syntevo com smartgit documentation
  • 创建多个 git 分支的联合分支

    我希望能够在现有分支之上分层其他分支 并独立修改这些分支 这很有用 例如 允许将各个子项目的二进制文件统一到同一个项目中bin目录 一般来说 给定的文件仅存在于一层中 理想情况下 我想我会使用 unionfs 来完成此任务 但它必须以某种方
  • 结帐时出现 Git 错误:“致命:引用不是树”

    当我决定弄清楚为什么我正在从事的项目如此重要时 这一切就开始了 我运行了以下脚本 git rev list objects all git cat file batch check objecttype objectname objects
  • 在种子项目上构建时如何组织 git 存储库

    我正在基于从 github 克隆的种子项目 MEAN io 构建一个网站 如何将这些文件与我自己的文件分开 由于该种子提供了广泛的文件框架 因此我自己的文件分布在整个项目中 我希望能够从种子中提取更新 但不能将其与我添加的文件混合 我知道我
  • 为什么从网上下载Git 2.0,总是得到1.9.4的安装包?

    为什么从网上下载Git 2 0 总是得到1 9 4的安装包 为什么你不能在互联网上的任何地方找到一个不仅标记为 2 0 而且你下载的安装存档也标记为这样的 Git 安装程序包 例如 这个2 1 3 站点 http git scm com d
  • Git:忽略版本控制文件

    gitignore 文件对于忽略一些我们不想控制的文件非常有用 不幸的是 当文件已处于版本控制之下时 它无法使用 例如 我的 gitignore 已添加到 git 中 文件可能与我的同事想要的不同 例如我想忽略 Vim 文件 每当我对此文件
  • 为什么 git 在每次合并时都运行“git gc --auto”?

    今天 git 开始表现得很有趣 嗯 比平时更有趣 坚持运行git gc每次合并后 即使它们是背靠背的 C Projects my current project gt git pull remote Counting objects 31
  • 是否可以从 Github 网站或 API 获取分支合并列表?

    在我们的工作流程中 不会 直接 提交到主分支 主分支仅接收来自 Pull 请求的合并 我们可以将每次合并视为添加到主分支的新功能 因此 我想获得一个合并到 master 中的列表 作为一种可视化随着时间的推移添加到产品中的功能块的方式 gi
  • git 清除远程仓库

    如果我将错误的初始提交 或多个 推送到远程存储库 并且只想清除 销毁它 我可以通过命令来完成吗 将其从服务器中完全删除非常重要 这样它就不会占用磁盘空间 例如 今天我推送了一个完整的 Visual Studio 项目 其中包含 dll sd
  • gerrit - git(pull、checkout、cherrypick)的用途是什么?

    在 Android 的 gerrit ex 中 link https android review googlesource com c 109934 要下载补丁 我看到4个选项 回购下载 checkout pull 择优挑选 它们之间有什

随机推荐