【问题标题】:Rebase the protected branch without PR在没有 PR 的情况下重新设置受保护的分支
【发布时间】:2022-01-21 13:26:25
【问题描述】:

我有 masterhotfix_master 分支。这些是发布分支,在 Gitlab UI 中的项目设置下受到保护。

我想要实现的是,在从master 发生的每个生产版本之后重新设置hotfix_master 分支,这样如果客户提出任何错误,我们可以在hotfix_master 分支上修复该错误并发布给客户.

在进行概念验证时,我意识到即使 hotfix_master 分支受到保护,我仍然可以在不创建任何 PR 的情况下进行 rebase。这是预期的吗?如果是,保护有什么用?以及只有在创建 PR 后才允许 rebase 应该怎么做?

编辑 1

这就是我正在做的事情

    - git fetch
    - git checkout hotfix_master
    - git diff --name-only origin/hotfix_master...origin/master
    - git rebase origin/master
    - git status
    - git push

在变基之后,我看到的是,来自master 的所有更改现在都在hotfix_master 上。那么,公关的问题在哪里?为什么 gitlab 不抱怨你没有提出 PR 。请推荐

编辑 2

【问题讨论】:

  • I can still rebase without creating any PR 你是怎么做到的?
  • 请建议。见编辑 1
  • 有什么建议?你需要什么建议? where is the question of PR ? 没有“拉取请求”,您没有提出任何请求。 why gitlab is not complaining that you haven't raised PR 为什么要呢?您只连接git fetch,之后您可以关闭您的网络连接。
  • 对不起,忘记在 EDIT 1 的末尾添加 git push 命令。所以我的疑问是,我可以在没有 PR 的情况下将代码推送到 hotfix_master 分支。不明白为什么?
  • 现在这改变了一切;)。那么,每个命令的确切输出是什么?如果你能够推送,这意味着没有任何变化或者你打错了——分支名称、错误的项目、错误的 gitlab 服务器、你没有正确应用保护等等。它应该被拒绝。

标签: git gitlab git-rebase


【解决方案1】:

在此设置中,如果 hotfix_master 具有 master 没有的提交,则推送(EDIT 1 中的最后一个命令)应该会因为分支保护而失败。

如果您希望拒绝正常推送(不允许更改历史记录),则必须将保护设置(编辑2)“允许推送”更改为更高级别,拒绝任何不应该做你在Edit 1中演示的人。

除此之外:假设 master 是当前生产中的代码,您通常会将 master 合并到其他分支以保留分支之间的提交历史记录。

【讨论】:

    【解决方案2】:

    "Branch protection" 是 GitLab 和 GitHub 的一个功能。它可以保护共享存储库中的分支不被强制推送,从而可能丢失历史记录。

    当你有一个本地克隆时,你可以对你的本地分支做任何你想做的事情(创建它们、重置它们、合并它们、变基它们、创建提交等),但你可以只对“受保护的分支”执行快进推送。

    【讨论】:

    • 请建议。见编辑 1
    • @user2315104 运行git push 如果您的服务器设置正确并且分支确实受到影响,则在重新定位本地分支后将失败。 之前推送的所有内容都不受服务器上任何分支设置的影响。
    • 请参阅编辑 2:分支受到保护。不确定缺少哪个设置
    • @user2315104 再次,本地操作不受分支设置影响。他们为什么会? git push 在这些分支上的非快进被阻止。在您推送之前,GitLab 完全不知道本地克隆中发生的任何事情。只有推送会失败
    • 好的。知道了 。谢谢
    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2020-02-11
    • 2012-08-20
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多