防止将Git合并到主分支

10

我正在使用分支来创建和部署我们平台的自定义实例。这些实例通常从“master”分支开始创建,稍微进行一些定制,然后被部署到测试和生产环境,并最终存档。

如果在主分支中添加了新功能或修复了错误,我希望能够将它们获取/合并到我的项目实例(分支)中,但我几乎从不想将更改从分支合并回主分支。最近发生了一个错误,导致一些严重的问题。更新代码库时,执行 git pull 命令会将所有更改合并到主分支,然后将其推送回主代码库。

有没有一种简单的方法来禁止将更改合并回主分支?或者至少需要一些 --force 标志才可以合并?

3个回答

2
你可以通过禁止任何人推送主支来确保其他分支不会合并到主支。有权限的人可以这样做。Gitolite是一种允许你精细调整对分支访问权限的工具。你也可以编写自己的服务器端钩子,并拒绝更新主支,除非你是特定的用户。

有人给我负评是怎么回事呢?让我知道我的回答有什么问题,我会进行澄清。谢谢。 - Adam Dymitruk
嗨,亚当,我不认为我对你的答案进行了投反对票。我相当确定我点了赞。但如果我犯错了,对不起。此外,目前来说,Gitolite 对我们的需求有点过于复杂,但我能看出服务器端钩子可能能够满足我的需求。 - balm
gitolite非常容易。我建议你试试看。最大的好处是它极大地简化了密钥管理。哦,我并不是说你点了踩。你无法获取那个信息。我真的很好奇为什么我的答案没有满足某些人或者我有错误。 - Adam Dymitruk

1

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 或类似的操作,将所有东西合并在一起了。或者至少这是我所理解的。 - balm
不要使用 git pull。先使用 git fetch,然后根据更新的远程跟踪分支进行合并、变基或重置本地分支。 - Adam Dymitruk
我同意亚当的做法,这也是我处理的方式。只要确保在推送更改后不要进行变基操作,否则会出现问题。 - Jacob Groundwater

0

如果你只是想避免合并到主分支,你可以使用预合并钩子来禁止它。


1
我没有找到任何关于预合并钩子的证据。 - pjmorse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接