第一次在团队里用 Git,我把 main 分支保护规则给绕晕了

Jules45 专家 1小时前 261 浏览 10 点赞 约 2 分钟

前两天给 He4rt 社区的 4noobs 项目改 README,就换个 badge、调个 logo 对比度、加个目录索引,改动加起来不足 50 行。按理说十分钟能合进去,结果我在本地 git checkout -b fix/readme-typo 又删又建折腾了三回,硬是把个「文档类首贡」拖成了两小时的心理建设实录。

卡住的根本不是命令,是那种「万一我把 main 推挂了怎么办」的虚张声势。以前独自写代码,git push origin master 一把梭,从没想过保护分支、required reviews、status checks 这些东西。真进了别人的仓库,看着 Settings → Branches → Branch protection rules 里密密麻麻的勾选框,突然发现自己连「能不能直接推」这件事都不敢确定。

几个把我绕进去的坑:

  • git push 之后终端吐出的那个 Create a pull request 链接,我以为点一下就合并了。实际上那是去 GitHub 网页再走一遍「New pull request → base: main → compare: fix/readme-typo → Create」的流程。Push 只是把分支推到远端,PR 才是正式求合并。
  • 保护分支开启了「Require a pull request before merging」和「Require approvals」,我本地测完 git push origin fix/readme-typo 就觉得大功告成,回头一看 PR 页面写着「This branch has no commits in common with the base branch」。原因是我基于一个旧的 main 切的分支,中间 upstream 已经合了别人的提交,没 git pull --rebase upstream main 同步一下,历史直接断层。
  • Commit message 写成 update readme 被 CI 里的 commitlint 拦住了。项目用 Conventional Commits 规范,必须是 docs: update README badge and add TOC 这种格式。改了三次 message 才过检,git commit --amend 现在肌肉记忆里了。
  • .github 目录下的 PULL_REQUEST_TEMPLATE.mdCONTRIBUTING.md 我以为是生成的,没仔细看。填 PR 描述时才发现模板里要求列「Related issue」「Type of change」「Checklist」三段,我空着提交,reviewer 直接评论「Please fill the template」。原来贡献指南不是摆设,是真要照着填。

后来理顺的最小可行流程:

# 1. 同步上游最新 main
git fetch upstream
git checkout main
git rebase upstream/main

# 2. 切新分支,名字按约定:type/short-desc
git checkout -b docs/readme-badge-and-toc

# 3. 改代码,分小步提交,message 守规范
git add README.md
git commit -m "docs: replace outdated badge and add table of contents"

# 4. 推分支,顺手把上游设成 upstream(方便后续 rebase)
git push -u origin docs/readme-badge-and-toc

# 5. 终端给的链接打开,按模板塌实填 PR 描述
#    - What: 改了什么
#    - Why: 为什么改
#    - Checklist: 测过没、文档改没、breaking change 有没

合进去那一刻 CI 全绿、reviewer 批个 👍,才发现所谓「团队协作」无非就是:别动别人的分支、别推烂 main、把上下文写清楚让审核的人少点脑补。那些保护规则、模板、lint,全是为了把「靠自觉」变成「靠流程」。

下回再改别人的仓库,我大概率还会先 git status 确认三遍当前分支名。但至少不用再对着「Create pull request」按钮发呆十分钟了。

githubgitPull Request4noobsConventional Commits
同类方向的延伸案例可以参考AI大模型变现案例库,有不少直接可参考的案例。

全部回复 (3)

小Ray在路上 中级 1小时前
提 PR 先标个 Draft 自己跑跑 CI 不行吗?
0 回复
完美主义技术宅 专家 1小时前
真怕搞砸就先 fork 到自己名下改,跑通 CI 再提上游 PR,主仓库 main 根本动不了
0 回复
内卷王调参侠 中级 1小时前
第一次提 PR 手抖得连 commit message 都改了三遍
0 回复

发表回复

支持 Markdown 格式