【问题标题】:How to reset and apply it to all users local banches?如何重置并将其应用于所有用户本地分支?
【发布时间】:2017-07-19 09:27:47
【问题描述】:

我们有这个分支结构:

  • master(在生产环境中构建/部署)
  • qa(在问答环境中构建/部署)
  • 功能分支

所以我们从 master 创建一个特性分支,然后当我们需要通过 Q&A 验证特性时将其合并到 qa(从 master 创建)。

有时我们需要从 master 重新构建 qa,因为一些开发直接合并到 master(小型或错误修复)。

我做了什么:

git checkout qa
git reset --hard master
git push --force origin qa

所以遥控器现在完全符合我的要求。

但是现在,当其他开发人员执行 git fetch 时,他们在本地 qa 上的所有不在 master 上的提交都显示为传出提交。这似乎合乎逻辑。我们不得不在每个人的机器上做一个git reset --hard origin/qa,但这有点危险。

还有其他解决方案吗?

编辑:我们为什么要这样做:qa 分支上的某些功能已被放弃,因此我们需要从 master 重新创建 qa 分支,然后在其上合并所有其他分支。

【问题讨论】:

  • 我不太了解您的用例。你为什么不简单地将 qa 重新设置到 master 上?
  • 我不明白 - 你将 qa 重置为 master 但推送 preprod 分支?
  • @phd,我的错字错了,我编辑了它
  • @running.t ,我为添加用例而编辑

标签: git feature-branch


【解决方案1】:

在您完成git push --force 之后,强制拉动所有客户端是唯一的选择。为了降低危险,首先创建一个临时分支以在客户端上保留分支 qa,进行强制拉取,然后从保留的 qa 中挑选提交并删除临时分支。

【讨论】:

    【解决方案2】:

    您正在使用(可能不知道)来自 Adam Dymitruk 的“branch per feature”工作流程,这确实是一个很棒的工作流程。

    请注意,Dymitruk 建议在您每次更改任何内容时从头开始(即从master)重新创建qa,而不仅仅是在您想要“取消合并”某个功能时。 p>

    这意味着:只需删除qa 分支并完全重建它;注意以完全相同的顺序合并所有已经存在的功能分支。您显然还想激活git rerere 缓存并确保所有开发人员彼此之间同步该缓存(当然使用git)。

    因此,任何地方都不会出现奇怪的合并或重置,每次只有一个干净、新鲜的qa。整个操作最好在一些脚本的帮助下完成,或者由您的 CI/CD 代理自动完成。

    有关完整说明,请参见 Dymitruk 的网站。

    【讨论】:

    • 我们确实在使用这个流程(我们知道这一点)。我们尝试删除 qa 分支,然后从 master 创建它,但开发人员不断推送不在新 qa 分支上但在旧分支上的提交,他们必须删除本地 qa,签出并将其功能合并到其中.
    • @remibourgarel:是的,他们有。该工作流程的这一部分(重新创建 QA)在我看来既是有史以来最伟大的事情,也是在团队中正确的诅咒。直接提交到 qa 需要严格禁止,否则会出错。
    • 确实,对于 VS2017,我们将尝试创建挂钩来避免它(您在 qa 分支上,因为您刚刚进行了合并而忘记返回您的功能)
    猜你喜欢
    • 2015-04-26
    • 2019-10-30
    • 2022-11-05
    • 2018-04-27
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多