百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

同事git push到主分支上了,技术总监怒了

wptr33 2025-05-15 21:29 4 浏览

事情是这样的,同事前几天提交使用git提交代码的时候不小心提交到主分支上了,关键还提交成功了,这可是他自己开发的模块,还没测试的呢。技术总监也知道了,这下他慌乱了。最后还是技术总监给他兜底了。

为了防止以后出现git push到主分支,所以写了这篇文章记录一下。

防止 git push 到主分支上

为了防止不小心将代码 push 到主分支(如 mainmaster),可以采取以下几种方法:

1. 使用 Git 钩子(Git Hooks)

示例代码: 在项目的 .git/hooks 目录下创建一个名为 pre-push 的文件,并添加以下内容:

#!/bin/sh

# 获取要推送的分支名
branch=$(git symbolic-ref --short HEAD)

# 如果当前分支是 main 或 master,则阻止推送
if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
  echo "Error: Cannot push to $branch branch."
  exit 1
fi

然后,给该文件添加执行权限:

chmod +x .git/hooks/pre-push

这样,在执行 git push 时,如果当前分支是 mainmaster,就会触发钩子脚本,阻止推送操作。

2. 配置 Git 仓库的分支保护规则

如果你使用的是 GitHub、GitLab 等远程 Git 仓库托管服务,可以在仓库设置中配置分支保护规则,禁止直接推送代码到主分支。

以 GitHub 为例:

  1. 登录 GitHub,进入你的仓库页面。
  2. 点击仓库设置中的 "Settings" 选项卡。
  3. 在左侧菜单中选择 "Branches"。
  4. 在 "Branch protection rules" 部分,点击 "Add branch protection rule"。
  5. 输入要保护的分支名称(如 mainmaster),勾选 "Protect matching branches" 选项,然后在 "Rules" 部分勾选 "Require pull request reviews before merging" 选项。
  6. 点击 "Create" 按钮保存设置。

这样,只有通过合并请求(Pull Request)并经过审查后,才能将代码合并到主分支。

Git 分支在工作中的常用应用

1. 特性开发分支(Feature Branch)

  • 场景:开发新功能或特性时。
  • 操作流程
  • 从主分支(如 mainmaster)创建一个新的特性分支:
git checkout -b feature/new-feature
  • 在特性分支上进行开发,提交代码:
git add .
git commit -m "Add new feature"
  • 开发完成后,切换回主分支:
git checkout main
  • 将特性分支合并到主分支:
git merge feature/new-feature
  • 删除特性分支:
git branch -d feature/new-feature

2. 修复分支(Bugfix Branch)

  • 场景:修复主分支上的 Bug 时。
  • 操作流程
  • 从主分支创建一个修复分支:
git checkout -b bugfix/fix-bug
  • 在修复分支上定位并修复 Bug,提交代码:
git add .
git commit -m "Fix bug"
  • 切换回主分支:
git checkout main
  • 将修复分支合并到主分支:
git merge bugfix/fix-bug
  • 删除修复分支:
git branch -d bugfix/fix-bug

3. 发布分支(Release Branch)

  • 场景:准备发布新版本时。
  • 操作流程
  • 从主分支创建一个发布分支:
git checkout -b release/v1.0.0
  • 在发布分支上进行版本相关的调整,如更新版本号、修改文档等:
git add .
git commit -m "Prepare for release v1.0.0"
  • 发布完成后,将发布分支合并到主分支和开发分支(如 develop):
git checkout main
git merge release/v1.0.0
git checkout develop
git merge release/v1.0.0
  • 删除发布分支:
git branch -d release/v1.0.0

4. 热修复分支(Hotfix Branch)

  • 场景:在已发布版本中发现严重 Bug,需要紧急修复时。
  • 操作流程
  • 从主分支创建一个热修复分支:
git checkout -b hotfix/fix-critical-bug
  • 在热修复分支上快速修复 Bug,提交代码:
git add .
git commit -m "Fix critical bug"
  • 切换回主分支:
git checkout main
  • 将热修复分支合并到主分支:
git merge hotfix/fix-critical-bug
  • 如果有开发分支(如 develop),也要将热修复分支合并到开发分支:
git checkout develop
git merge hotfix/fix-critical-bug
  • 删除热修复分支:
git branch -d hotfix/fix-critical-bug

5. 开发分支(Develop Branch)

  • 场景:作为日常开发的主要分支,用于集成多个特性分支的代码。
  • 操作流程
  • 从主分支创建开发分支:
git checkout -b develop
  • 在开发分支上集成特性分支、修复分支等:
git merge feature/new-feature
git merge bugfix/fix-bug
  • 定期将开发分支的代码合并到主分支:
git checkout main
git merge develop

创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦

小伙伴们在工作中还遇到过其他应用场景吗,欢迎评论区留言讨论哦。

相关推荐

MySQL合集-innobackupex在线备份及恢复(全量和增量)

Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innob...

MySQL合集-单机容器化

MySQL单机容器化mkdir-p/opt/mysql/{data,etc}cpmy.cnf/opt/mysql/etc#dockersearchmysqldockerpullm...

MySQL合集-小版本升级指南

下载最新的mysqlwgethttps://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz...

Mysql 数据库运维方案

前言...

如果忘记了 WAMP 中本机数据库(MySQL)的密码,该怎么办?

如果忘记了WAMP中本机数据库(MySQL)的密码,可以通过以下步骤来重置:停止MySQL服务:打开WAMP,点击“停止所有服务”,或者右键点击WAMP图标,在菜单中选择“MySQL...

Linux服务器日常巡检脚本分享

Linux系统日常巡检脚本,巡检内容包含了,磁盘,...

在 SpringBoot 中设计一个订单号生成系统,原理,架构与实战

在SpringBoot中设计一个订单号生成系统,原理,架构与实战首先,我得考虑订单号的基本要求。通常订单号需要唯一性,不能重复,否则会出大问题。然后可能还要有一定的可读性,比如包含日期、时间或者业...

K8S官方java客户端之七:patch操作

欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;...

浅谈Kubernetes CRD和Operator的原理和使用方法

总结CRD的全称是CustomResourceDefinition,是Kubernetes为提高可扩展性,让开发者去自定义资源(如Deployment,StatefulSet等)的一种方法....

kubernetes实用操作:kubectl命令行工具使用全面总结

kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作。本节对kubectl的子命令和用法进行详细说明。kubectl用法概述kubectl[command][...

ceph rbd块存储挂载及文件存储建立

cephrbd块存储挂载及文件存储建立一、rbd块存储挂载1创建一个OSDpool...

odps sql中常用的时间处理方法

1、获取当前时间selectgetdate();2、获取昨天(字符串格式)selectto_char(dateadd(getdate(),-1,'dd'),'yyyymmd...

每天一个 Python 库:datetime 模块全攻略,时间操作太丝滑!

在日常开发中,时间处理是绕不开的一块,比如:...

时序异常检测工具:ADTK

1adtk简介智能运维AIOps的数据基本上都是...

又一批长事务,P0故障谁来背锅?

最近几周,发生过多起因为事务问题引起的服务报错。现象为...