1. 为什么今天必须把 Git 默认分支从 master 改成 main?
你刚初始化一个新仓库,敲下git init,再执行git status,终端里赫然显示:On branch master。这个画面我看了十多年——从大学实验室第一次接触 Git,到带过几十个开源协作项目,再到给某高校的开发课程做实操演示,几乎所有人默认接受“master 就是主分支”这件事。但就在 2020 年中旬起,GitHub、GitLab、Bitbucket 等主流平台陆续将新建仓库的默认分支名从master切换为main;2021 年底,Git 官方在 2.30 版本中正式支持通过配置项init.defaultBranch指定初始化时的默认分支名;到了 2023 年,几乎所有主流 CI/CD 工具链(Jenkins、GitLab CI、GitHub Actions)都已原生适配main分支作为部署触发源。这不是一次简单的命名变更,而是一次基础设施级的范式迁移。
核心关键词——Git 默认分支、main 分支、init.defaultBranch、分支命名规范、团队协作一致性——已经深度嵌入现代代码协作的底层逻辑。如果你还在用master,不是技术落后,而是正在被动承担三类隐性成本:第一,新成员 clone 仓库后执行git push -u origin master会失败(远程无该分支),需额外解释“先创建再推送”;第二,CI 配置文件(如.github/workflows/ci.yml)中硬编码的on: [push, pull_request]默认监听main,若本地仍是master,会导致流水线不触发;第三,当团队混合使用 GitHub(默认main)和自建 Git 服务器(仍用master)时,git checkout master和git checkout main的切换会频繁引发误操作,尤其在快速修复线上问题时,一个分支名打错就可能切到错误环境。
这个问题看似只改一行配置,实则牵动整个协作链条:它影响新人上手速度、CI/CD 可靠性、跨平台仓库同步稳定性,甚至影响 PR 模板、代码审查流程、发布脚本的健壮性。我曾协助某公司完成 127 个存量仓库的分支迁移,发现其中 38% 的故障根因并非代码缺陷,而是分支命名不一致导致的自动化脚本中断。所以,“快速设置 Git 默认分支由 master 变为 main”,本质不是教你怎么敲命令,而是帮你建立一套可复用、可审计、可传承的分支治理习惯——它适用于个人开发者、小团队、中大型研发组织,无论你用的是 macOS、Windows 还是 Linux,无论你是否使用 IDE 内置 Git 工具,也无论你是否管理私有 Git 服务器。
2. 设计思路与方案选型:为什么只推荐全局配置 + 本地覆盖组合?
很多人看到“改默认分支”,第一反应是去改 Git 源码、重编译二进制,或者写个 shell 脚本每次git init后手动git branch -M main。这两种做法我都试过,也都踩过坑。前者维护成本极高,Git 每次升级都要重新编译;后者看似简单,但一旦忘记执行,新仓库就又回到master,且无法被 Git 自身识别为“默认分支”——这意味着git switch、git restore等新命令仍会默认指向master,IDE 的分支下拉菜单也不会自动高亮main。
真正可持续的方案,必须满足四个硬性条件:
- 可继承性:新仓库初始化即生效,无需人工干预;
- 可追溯性:能清晰区分“全局策略”和“项目特例”,避免配置污染;
- 可兼容性:不影响已有仓库行为,不破坏历史提交结构;
- 可验证性:一条命令即可确认当前生效的默认分支名,不依赖外部工具。
Git 官方在 2.28 版本引入的init.defaultBranch配置项,恰好完美覆盖这四点。它是一个纯客户端配置,作用域分三级:系统级(--system)、用户级(--global)、仓库级(--local)。我们采用“用户级全局配置为主 + 仓库级局部覆盖为辅”的双层结构,这是经过数十个真实项目验证的最优解。
为什么不用系统级?因为--system需要管理员权限,且修改后所有用户共享同一配置,在多用户开发机(如某高校实验室的公共工作站)上极易引发冲突。为什么必须保留仓库级覆盖能力?因为总有特殊场景:比如你正在参与一个遗留系统维护项目,其 CI 流水线、Docker 构建脚本、部署文档全部强依赖master分支名,此时强行统一为main会直接阻断交付。这时只需在该项目根目录执行git config --local init.defaultBranch master,就能实现“全局默认main,但此项目例外用master”,Git 会自动按local → global → system优先级逐层查找并采用第一个匹配值。
这种设计还带来一个意外好处:它天然支持“渐进式迁移”。你可以先在自己机器上启用main,观察两周,确认所有工作流(包括 IDE 插件、提交钩子、代码扫描工具)均无异常后,再通过内部 Wiki 或团队会议推动全员切换。我们曾用这套方法帮助某金融科技团队在 3 周内完成 42 名开发者的平滑过渡,零生产事故。
提示:
init.defaultBranch仅影响git init和git clone创建的新仓库,对已有仓库完全无感。它不会重命名现有分支,也不会修改.git/HEAD文件内容,纯粹是“未来新建行为”的策略声明。
3. 核心细节解析与实操要点:参数含义、生效范围与安全边界
init.defaultBranch是一个字符串型配置项,其值就是你希望新仓库默认创建的分支名称。它看起来只是一行文本,但背后涉及 Git 配置系统的完整加载机制、不同操作系统下的路径差异、以及 IDE 对 Git 配置的读取时机。下面我把每个关键细节掰开揉碎讲清楚。
3.1 配置命令的完整语法与平台差异
最常用的是用户级(全局)配置:
git config --global init.defaultBranch main这条命令会在你的用户主目录下生成或修改~/.gitconfig文件(Linux/macOS)或%USERPROFILE%\.gitconfig(Windows),添加如下内容:
[init] defaultBranch = main注意:--global参数不能省略,否则 Git 会默认写入当前仓库的.git/config,变成仓库级配置,失去“全局默认”意义。我见过太多人漏打--global,结果反复执行命令却始终不生效,最后以为是 Git Bug。
在 Windows 上,如果你使用 Git for Windows 自带的 Bash,路径没问题;但若使用 PowerShell 或 CMD,需确保环境变量%USERPROFILE%指向正确位置(通常是C:\Users\YourName)。曾有位某公司运维同事反馈“配置无效”,排查发现他用的是企业定制版 Windows,%USERPROFILE%被重定向到网络驱动器,而 Git 无法访问该路径下的.gitconfig。解决方案是显式指定配置文件路径:
git config --file "$env:USERPROFILE\.gitconfig" --global init.defaultBranch mainmacOS 用户需留意:如果你通过 Homebrew 安装 Git,配置文件路径与系统自带 Git 一致;但若使用 Xcode Command Line Tools 自带的 Git(版本通常较旧),它可能读取/usr/local/etc/gitconfig(系统级)而非用户级。建议统一用 Homebrew 安装最新版 Git,并执行which git确认路径。
3.2 验证配置是否真正生效的三重校验法
光写入配置不够,必须验证它是否被 Git 正确加载。我总结出一套“终端+仓库+IDE”三重校验法,缺一不可:
第一重:终端直查
执行以下命令,查看当前生效的init.defaultBranch值:
git config --get init.defaultBranch如果返回main,说明配置已写入且可读取。若返回空,说明配置未生效,需检查是否漏了--global,或路径权限问题。
第二重:新建仓库实测
创建临时目录,初始化新仓库并检查分支名:
mkdir /tmp/test-init && cd /tmp/test-init git init git branch --show-current # 应输出 main注意:git branch --show-current是 Git 2.22+ 的命令,比git rev-parse --abbrev-ref HEAD更直观。如果仍显示master,大概率是 Git 版本过低(<2.28),需升级。
第三重:IDE 环境验证
以 VS Code 为例:打开命令面板(Ctrl+Shift+P),输入Git: Initialize Repository,创建新仓库后,状态栏应显示main;在 Source Control 视图中,分支下拉菜单默认选中项应为main。IntelliJ 系列 IDE 同理,需重启 IDE 或执行File > Invalidate Caches and Restart刷新 Git 配置缓存。
注意:某些 IDE(如老版本 WebStorm)会缓存 Git 配置数分钟,首次验证建议重启 IDE。另外,VS Code 的 Remote-SSH 扩展连接远程服务器时,需确保远程服务器上的 Git 也已配置
init.defaultBranch,否则本地配置无效。
3.3 安全边界:哪些操作不受影响?哪些必须手动处理?
init.defaultBranch是一个“只影响新建行为”的开关,它的安全边界非常清晰。以下是明确不受影响的五类操作,避免你产生误解:
| 操作类型 | 是否受影响 | 说明 |
|---|---|---|
git clone已有仓库 | 否 | 克隆时完全继承远程仓库的默认分支(即HEAD指向的分支),与本地init.defaultBranch无关 |
git init初始化空仓库 | 是 | 新建.git目录后,自动创建名为main的初始分支 |
git checkout -b new-feature | 否 | 创建新特性分支,与默认分支名无关 |
git merge main | 否 | 分支名是字符串字面量,需手动输入,Git 不会自动替换 |
git push -u origin main | 否 | 推送目标分支名需显式指定,Git 不会自动将master替换为main |
需要你手动处理的只有两类场景:
- 存量仓库迁移:已有
master分支的仓库,需执行git branch -M main重命名,并推送更新:git push -u origin main && git push --delete origin master; - 远程默认分支更新:GitHub/GitLab 等平台需在仓库 Settings 中手动将默认分支设为
main,否则git clone后HEAD仍指向master。
这两步不属于init.defaultBranch的职责范围,但却是完整迁移闭环的关键环节。我建议把它们写成标准化脚本,放在团队共享的 DevOps 工具箱中。
4. 实操过程与核心环节实现:从单机配置到团队落地的完整路径
现在我们进入真正的实操环节。我会以一个真实场景为例:你是一名前端工程师,刚入职某公司,需要在自己的开发机上完成 Git 默认分支切换,并协助团队制定迁移规范。整个过程分为四个阶段:单机验证、批量迁移、CI/CD 适配、团队推广。每一步都附带可直接复制粘贴的命令、参数计算依据和现场记录。
4.1 单机验证:5 分钟完成个人环境配置
这是最基础也最关键的一步。请严格按顺序执行,不要跳步:
步骤 1:确认 Git 版本
打开终端,执行:
git --version输出必须为git version 2.28.0或更高。如果低于此版本,请先升级:
- macOS:
brew update && brew upgrade git - Windows:从 https://git-scm.com/download/win 下载最新安装包
- Linux(Ubuntu/Debian):
sudo apt update && sudo apt install git
步骤 2:写入全局配置
git config --global init.defaultBranch main执行后无任何输出即为成功。
步骤 3:验证配置值
git config --get init.defaultBranch确认输出为main。
步骤 4:创建测试仓库
mkdir ~/git-test && cd ~/git-test git init git branch --show-current此时终端应输出main。如果仍是master,请立即执行git --version再次确认版本,并检查是否在某个子目录中(某些 IDE 会自动初始化 Git,干扰测试)。
步骤 5:IDE 同步验证
打开 VS Code,按 Ctrl+Shift+P,输入Git: Initialize Repository,选择~/git-test目录。初始化完成后,观察底部状态栏,应显示main。如果显示master,重启 VS Code 并重试。
实操心得:我在某次内部培训中发现,约 12% 的学员卡在步骤 4,原因全是 Git 版本过低。建议把版本检查做成自动化脚本,每次配置前自动运行。另外,Mac 用户要注意 Terminal 默认 Shell 是 zsh,而某些老教程教的是 bash,命令完全通用,无需切换 Shell。
4.2 批量迁移:安全高效地处理 50+ 个存量仓库
假设你负责维护公司前端组的 53 个 npm 包仓库,全部托管在 GitHub,当前默认分支均为master。我们需要在不中断任何 CI 流水线的前提下,将它们全部迁移到main。以下是经过压测验证的标准化流程:
第一步:生成待迁移仓库清单
使用 GitHub CLI(gh)获取所有仓库列表并过滤出需要迁移的:
# 安装 gh:https://cli.github.com/ gh auth login # 登录 GitHub 账号 gh repo list --limit 100 --json name,sshUrl,defaultBranch | \ jq -r 'select(.defaultBranch == "master") | "\(.name) \(.sshUrl)"' > repos-to-migrate.txt该命令会生成repos-to-migrate.txt,每行格式为repo-name git@github.com:org/repo-name.git。
第二步:编写迁移脚本migrate-branch.sh
#!/bin/bash # migrate-branch.sh set -e # 任一命令失败即退出 REPOS_FILE="repos-to-migrate.txt" LOG_FILE="migration-log-$(date +%Y%m%d-%H%M%S).log" while IFS= read -r line; do [[ -z "$line" ]] && continue read -r repo_name repo_url <<< "$line" echo "=== 开始迁移 $repo_name ===" | tee -a "$LOG_FILE" # 1. 克隆仓库(仅克隆 HEAD,节省时间) git clone --depth 1 "$repo_url" "/tmp/$repo_name" 2>> "$LOG_FILE" cd "/tmp/$repo_name" # 2. 重命名分支 git branch -M main 2>> "$LOG_FILE" # 3. 推送新分支并删除旧分支 git push -u origin main 2>> "$LOG_FILE" git push origin --delete master 2>> "$LOG_FILE" # 4. 更新 GitHub 默认分支(需 GitHub Token) gh api repos/{owner}/{repo} --method PATCH \ --field default_branch="main" \ --header "Accept: application/vnd.github.v3+json" \ --header "Authorization: token $GITHUB_TOKEN" 2>> "$LOG_FILE" echo "✅ $repo_name 迁移完成" | tee -a "$LOG_FILE" cd - > /dev/null rm -rf "/tmp/$repo_name" done < "$REPOS_FILE" echo "=== 迁移完成,日志保存在 $LOG_FILE ==="第三步:执行迁移
chmod +x migrate-branch.sh export GITHUB_TOKEN="your_personal_access_token_here" # 生成于 GitHub Settings > Developer settings > Personal access tokens ./migrate-branch.sh该脚本的关键设计点:
- 使用
--depth 1克隆,单仓库平均耗时从 2 分钟降至 8 秒; set -e确保任一环节失败立即停止,避免部分成功导致状态混乱;- 所有错误重定向到日志,便于事后审计;
- GitHub API 调用前检查 Token 有效性,避免批量失败。
实操心得:我在实际迁移 53 个仓库时,发现 2 个仓库因保护分支策略(Branch Protection Rules)阻止删除
master。解决方案是在脚本中加入预检:gh api repos/{owner}/{repo}/branches/master/protection 2>/dev/null || echo "无保护策略",若存在保护规则,则先调用gh api repos/{owner}/{repo}/branches/master/protection --method DELETE解除。这个细节普通文档绝不会提,但却是生产环境成败的关键。
4.3 CI/CD 适配:让 GitHub Actions、GitLab CI 无缝支持 main
默认分支变更后,CI/CD 配置文件必须同步更新,否则流水线将静默失效。这不是可选项,而是强制项。以下是主流平台的适配方案:
GitHub Actions.github/workflows/ci.yml中需修改两处:
on:触发器中的分支名(如果显式指定了master);jobs.<job_id>.steps中 checkout 后的git checkout命令(如果存在)。
# 修改前(危险!) on: push: branches: [master] # ❌ 仅监听 master pull_request: branches: [master] # ❌ 仅监听 master # 修改后(推荐) on: push: branches: [main] # ✅ 监听 main pull_request: branches: [main] # ✅ 监听 main更优方案是使用通配符,提升可维护性:
on: push: branches: ['**'] # 监听所有分支,配合 job 条件判断 pull_request: branches: ['**']然后在 job 中添加条件判断:
jobs: test: runs-on: ubuntu-latest if: github.head_ref == 'main' || github.event_name == 'pull_request' steps: - uses: actions/checkout@v4 # 后续步骤...GitLab CI.gitlab-ci.yml中修改workflow:规则:
# 修改前 workflow: rules: - if: $CI_COMMIT_BRANCH == "master" # 修改后 workflow: rules: - if: $CI_COMMIT_BRANCH == "main"Jenkins
如果是 Pipeline Script,需修改checkout步骤:
checkout([ $class: 'GitSCM', branches: [[name: '*/main']], // 替换为 */main // ...其他参数 ])注意:所有 CI 配置修改后,必须手动触发一次
main分支的构建,确认日志中显示Running on ... for main。我曾因忘记更新 Jenkins 的分支表达式,导致连续 3 天的main提交未触发构建,直到线上发布失败才暴露问题。
4.4 团队推广:制定《分支命名规范 V2.0》并落地执行
技术方案解决的是“能不能”,而团队规范解决的是“要不要”和“怎么持续”。我们最终输出了一份 1200 字的《分支命名规范 V2.0》,核心条款如下:
原则一:默认即main
所有新创建的 Git 仓库(本地git init、GitHub 新建仓库、GitLab 新建项目),默认分支名必须为main。master仅允许在以下场景使用:
- 维护超过 5 年的遗留系统,且其 CI/CD、部署脚本、文档全部强绑定
master; - 与外部供应商系统对接,对方明确要求
master作为集成分支。
原则二:迁移窗口期
存量master仓库必须在 30 个自然日内完成迁移。迁移流程必须包含:
- 提交 PR 修改 CI 配置;
- 执行分支重命名并更新远程默认分支;
- 在 README.md 顶部添加迁移说明横幅;
- 通知所有协作者更新本地跟踪分支:
git branch --set-upstream-to=origin/main main && git checkout main。
原则三:工具链兜底
所有新入职员工的入职镜像中,预装 Git 2.30+ 并内置init.defaultBranch=main配置;
内部 DevOps 平台新建项目时,自动注入main分支初始化脚本;
代码扫描工具(如 SonarQube)的分支过滤规则,默认排除master,仅分析main及特性分支。
这份规范不是一纸空文。我们配套上线了三个落地工具:
- Git 配置检查 Bot:在 Slack 中输入
/git-check,自动返回当前机器的init.defaultBranch值及版本信息; - 迁移进度看板:实时展示各业务线仓库迁移完成率,红黄绿灯预警;
- 一键修复脚本:
curl -s https://internal.devops/toolkit/fix-git.sh | bash,自动完成本地配置、IDE 缓存清理、常用编辑器适配。
5. 常见问题与排查技巧实录:那些官方文档不会写的坑
在真实迁移过程中,我记录了 27 个高频问题,筛选出最具代表性的 6 个,附上完整排查路径和独家解决方案。这些问题,90% 的开发者会在第 3 天遇到。
5.1 问题:git init后仍是master,但git config --get init.defaultBranch显示main
现象:配置已写入,版本达标,但新建仓库分支名不变。
排查路径:
- 执行
git config --list --show-origin | grep defaultBranch,查看配置来源路径; - 如果输出类似
file:/etc/gitconfig init.defaultBranch=master,说明系统级配置覆盖了用户级; - 执行
git config --system --unset init.defaultBranch清除系统级冲突。
根本原因:某些 Linux 发行版(如 Ubuntu 22.04)预装 Git 时,会在/etc/gitconfig中写入init.defaultBranch = master作为发行版策略。--system优先级高于--global,导致你的配置被静默覆盖。
独家技巧:用git config --list --show-origin查看所有配置的来源文件,这是定位配置冲突的黄金命令。我把它设为 alias:git config --global alias.ls-config 'config --list --show-origin',以后只需git ls-config。
5.2 问题:VS Code 状态栏仍显示master,但终端git branch --show-current是main
现象:IDE 显示与终端不一致,且重启无效。
排查路径:
- 打开 VS Code 设置(Ctrl+,),搜索
git.path,确认指向正确的 Git 二进制路径; - 执行
which git,对比设置中的路径是否一致; - 如果不一致,修改
git.path为which git输出的路径; - 关闭所有 VS Code 窗口,删除
~/.vscode/extensions/下所有 Git 相关扩展缓存(如ms-vscode.vscode-node-azure-pack); - 重新打开 VS Code。
根本原因:VS Code 的 Git 扩展会缓存 Git 可执行文件路径。当你升级 Git 后,VS Code 仍调用旧版本(如/usr/bin/git),而新版本在/usr/local/bin/git,导致配置不生效。
独家技巧:在 VS Code 中按 Ctrl+Shift+P,输入Developer: Toggle Developer Tools,在 Console 中执行require('child_process').execSync('git --version', {encoding:'utf8'}),直接查看 VS Code 调用的 Git 版本。
5.3 问题:git clone新仓库后,git branch --show-current是main,但git status显示On branch master
现象:分支名显示矛盾,git log查看提交历史正常。
排查路径:
- 执行
cat .git/HEAD,查看内容是否为ref: refs/heads/main; - 如果是
ref: refs/heads/master,说明远程仓库的HEAD指针未更新; - 登录 GitHub/GitLab,进入仓库 Settings > Branches,将 Default branch 改为
main; - 重新 clone。
根本原因:git clone创建本地仓库时,会复制远程仓库的HEAD指针。如果远程HEAD仍指向master,即使你本地配置了init.defaultBranch=main,clone 出来的仓库也会以master为当前分支。
独家技巧:用git ls-remote --symref origin HEAD直接查看远程HEAD指向,无需登录网页端。
5.4 问题:执行git branch -M main后,git push --delete origin master报错 “error: unable to delete ‘master’: remote ref does not exist”
现象:远程分支已不存在,但命令报错。
排查路径:
- 执行
git ls-remote --heads origin,查看远程分支列表; - 如果输出中无
master,说明已被他人删除或已不存在; - 直接执行
git push -u origin main即可,无需删除步骤。
根本原因:多人协作时,master分支可能已被其他成员删除,但你的本地引用未同步。git fetch --prune可清理过期引用,但git push --delete会直接报错。
独家技巧:在迁移脚本中加入智能判断:
if git ls-remote --heads origin master | grep -q "master"; then git push origin --delete master fi5.5 问题:CI 流水线触发失败,日志显示 “No jobs triggered for branch master”
现象:GitHub Actions 日志明确提示未触发,但main分支有新提交。
排查路径:
- 进入 GitHub 仓库 Settings > Actions > General,检查 “Workflow permissions” 是否为 “Read and write permissions”;
- 检查
.github/workflows/ci.yml中on.push.branches是否拼写错误(如mian); - 执行
git show-ref --heads,确认本地main分支的 commit hash 与 GitHub 上一致; - 在 GitHub UI 中手动点击 “Run workflow”,选择
main分支触发。
根本原因:GitHub Actions 的分支匹配是大小写敏感的精确字符串匹配。main和Main被视为不同分支。
独家技巧:在 CI 配置中添加调试步骤,打印当前分支:
- name: Debug current branch run: echo "Current branch: ${{ github.head_ref }}"5.6 问题:团队成员执行git checkout master后,本地出现两个分支:master和main
现象:git branch显示master和main并存,且都指向同一 commit。
排查路径:
- 执行
git log --oneline --all --graph,查看分支关系; - 如果
master是main的直接祖先,说明有人执行了git checkout -b master; - 执行
git branch -d master删除冗余分支。
根本原因:git checkout master在本地无master分支时,会尝试从远程origin/master创建,但如果远程master已删除,Git 会创建一个孤立的master分支,指向当前HEAD。
独家技巧:设置 Git 安全策略,禁止创建未知远程分支:
git config --global checkout.defaultRemote origin git config --global advice.detachedHead false6. 我在实际操作中的体会是:默认分支只是冰山一角,真正的挑战在于协作心智的对齐
做完这轮迁移,我翻看了过去三年的团队会议纪要,发现一个有趣的现象:关于“分支命名”的讨论,90% 都集中在技术实现(怎么改、会不会丢数据),只有不到 10% 在讨论“为什么要改”。这恰恰暴露了技术团队最容易忽视的一点:工具变革的本质,从来不是命令行参数的调整,而是人与人之间协作预期的重新校准。
当我第一次在团队群里发git config --global init.defaultBranch main这条命令时,有位资深后端同事回复:“这玩意儿改了有啥用?反正我们 PR 都点main。” 两周后,他主动在周报里写了:“上周因分支名不一致,导致灰度发布脚本误将master的构建产物推到生产环境,回滚耗时 47 分钟。已按规范完成全部服务迁移。” —— 技术方案的价值,永远需要用真实的故障成本来丈量。
所以,如果你今天只记住一件事,请记住这个:init.defaultBranch不是一个配置项,而是一份协作契约。它意味着你承诺,今后所有新仓库都将遵循同一套命名语言;它意味着当新人 clone 代码时,不必再问“为什么是 master 而不是 main”;它意味着 CI 配置、部署文档、代码审查模板,都能基于一个稳定的前提运转。
我没有把这篇博文写成“Git 配置大全”,是因为真正的难点从来不在命令本身。我在某次跨部门协作中,亲眼见过前端团队已全面切换main,而后端团队因一个老旧的 Ansible Playbook 强依赖master,导致双方联调时反复出现“找不到分支”错误。最后解决方案不是改 Git 配置,而是把那个 Playbook 的分支名参数化,用变量{{ git_default_branch }}替代硬编码。你看,问题层层下探,最终落在了基础设施即代码(IaC)的设计哲学上。
因此,当你执行完git config --global init.defaultBranch main,不妨花 3 分钟,打开你最近一次提交的 CI 配置文件,搜索master,把它替换成main;再打开团队 Wiki,找到“新人入职指南”,在 Git 配置章节加上这一行;最后,把你今天学到的三重校验法,分享给坐在你隔壁的那位正在为分支问题抓狂的同事。
技术世界的进步,从来不是靠一个人敲出完美的命令,而是靠一群人,在每一次微小的配置调整中,默默加固协作的基石。