【问题标题】:preventing git merge to master branch防止 git 合并到主分支
【发布时间】:2011-12-30 22:10:19
【问题描述】:

我正在使用分支来创建和部署外部平台的自定义实例。这些实例通常从“主”分支开始,经过一定程度的定制,部署到测试和生产中,最后存档。

如果将新功能或错误修复添加到 master 中,我希望能够将它们提取/合并到我的项目实例(分支)中,但我几乎不想将分支中的更改合并回 master。这是最近发生的错误,并造成了一些严重的头痛。用于更新存储库的 git pull 将所有内容合并到主分支中,然后被推回主存储库。

有没有什么简单的方法可以禁止合并回master?或者至少需要一些 --force 标志?

【问题讨论】:

    标签: git git-merge git-pull


    【解决方案1】:

    您可以通过禁止任何人推送主分支来确保不会从其他分支合并到主分支。一个有权威的人可以做到这一点。 Gitolite 可以让您微调对分支的访问。您还可以编写自己的服务器端钩子并拒绝更新主分支,除非您是特定用户。

    【讨论】:

    • 反对票是怎么回事?让我知道我的答案有什么问题,我会澄清的。谢谢。
    • 嗨,亚当,我不认为我对您的回答投了反对票。我实际上很确定我提高了它。但如果我犯了错误对不起。 Gitolite 现在对我们的需求来说有点太多了,但我可以看到服务器端的钩子如何满足我的需求。
    • gitolite 非常简单。我建议你试一试。最大的好处是它极大地简化了密钥管理。哦,我并不是说是你投了反对票。你不能得到那个信息。我真的很好奇为什么我的回答不能让某人满意,或者我是否有错误。
    【解决方案2】:

    Git 非常乐意使用多个远程存储库。

    我建议为 每个 自定义实例使用一个远程存储库。这不会改变您的工作流程,因为 Git 可以将任意两个分支合并在一起,无论来源如何。

    要使用“主遥控器”中的错误修复来更新“自定义实例”,您需要输入类似

    git checkout <custom-branch>
    git fetch main
    git merge main/master
    

    其中main 是您所指的远程存储库master(我更改了名称以避免混淆分支和远程)

    对于您的本地分支,不要指定main 作为远程跟踪分支,而是指定一个特定于实例的远程。即每个自定义实例一个远程存储库。

    要将更改推送到您的自定义实例,请使用

    git push
    

    在极少数情况下,您需要将更改向上游推送到“主”分支使用

    git push main
    

    【讨论】:

    • 谢谢。这正是我们的工作方式,但不知何故有人做了一个 git push --all 然后一个 git pull 或类似的东西合并了所有东西。或者至少是我所理解的。
    • 不要使用 git pull。 Git 首先获取,然后通过合并、变基或重置本地分支对更新的远程跟踪分支进行相应的操作。
    • 我同意亚当的观点,我就是这样做的。只需确保在推送更改后不要变基,否则事情会变得丑陋。
    【解决方案3】:

    如果你只是想避免合并到master,你可以使用pre-merge hook来禁止它。

    【讨论】:

    • 我没有发现任何证据表明存在合并前挂钩之类的东西。
    猜你喜欢
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2017-02-26
    • 2019-03-28
    • 1970-01-01
    • 2017-08-14
    • 2014-10-28
    • 2011-11-20
    相关资源
    最近更新 更多