CalcGuide · 技术博客主页 / 一页纸学习计划
🔥极高

Git 与团队协作:从本地版本管理到完成一次规范协作

分类:工程技术 · 路径:docs/topics/git-and-collaboration/README.md

#git#collaboration#code-review#foundation

用 2~4 周从单人 commit 走到规范 PR / Code Review / 团队协作

父主题

顶层主题

子主题(0)

Git 与团队协作:一页纸学习计划

学习路线

本地版本管理(init / add / commit / status / log / diff)
  → 分支管理(branch / checkout / merge / stash)
  → 远程与协作(clone / fetch / pull / push / PR / Review / 冲突解决)
  → 高级改写(rebase / cherry-pick / reset / revert / tag / submodule)
  → 钩子与 CI 集成(pre-commit / husky / lint-staged / GitHub Actions)
  → 综合协作项目(首选:在 GitHub 完成一次开源 PR 流程;备选:模拟 5 人团队开发并合并 3 个 feature 分支)

每一步都是下一步的前置;不要跳级、不要并行学多个阶段。rebase / reset 是高风险操作,必须先在演练仓库里反复试错。

阶段周数分配(2~4 周,量力而行)

阶段2 周方案4 周方案备注
1. 本地版本管理0.5 周1 周含 Day 1~7 任务;命令清单密集
2. 分支管理0.5 周1 周必须配合画分支拓扑图
3. 远程与协作0.5 周1 周PR / Review 是重头戏
4. 高级改写0.5 周rebase / reset 风险高,2 周方案跳过此阶段
5. 钩子与 CI 集成0.5 周husky + GitHub Actions;2 周方案跳过
6. 综合协作项目0.5 周0.5 周含 README 与复盘

2 周方案对应每天满负荷、目标“会做规范 PR 即可”;4 周方案对应每周 6~8 小时、能完整覆盖高级改写与 CI。2 周方案不写阶段 4、5,但综合项目里仍要会用 rebase 维护自己的 PR 分支。

六阶段:核心知识、实践产出、可观察学会标准

阶段核心知识实践产出可观察学会标准
1. 本地版本管理init / clone / add / commit / status / log / diff / restore / .gitignore;Conventional Commits本地演练仓库 git-playground,至少 20 条语义化 commit不看 cheatsheet 能敲出 10 条以上命令;能解释工作区 / 暂存区 / 版本库三态切换;能在误 commit 后安全回退
2. 分支管理branch / checkout / switch / merge / stash / tag;fast-forward vs no-ff;分支命名规范main / dev / feature/* / hotfix/* 的本地演练项目能画出任意时刻的分支拓扑;能用 stash 暂存未完成工作;能解释何时用 fast-forward、何时强制 --no-ff 保留合并节点
3. 远程与协作remote / fetch / pull / push;SSH / HTTPS;PR / Code Review / Conflict;保护分支在 GitHub 完成一次 fork → PR → Review → merge 的完整记录(含 PR 链接、Review 截图)能解释 git fetchgit pull 的差异;能在 PR 中回应 Review 并 force-push 修复;能解决一次 rebase / merge 冲突并解释每一步
4. 高级改写rebase(interactive)/ cherry-pick / reset(soft/mixed/hard)/ revert / reflog / submodule一份改写历史的演练日志(before/after 对比)+ 一个带 tag 的版本仓库能用 interactive rebase 合并多条 commit;能用 reflog 找回误 reset 的提交;能解释 resetrevert 的本质差异(改写历史 vs 新增反向提交)
5. 钩子与 CI 集成pre-commit 框架 / husky / lint-staged;GitHub Actions(workflow / job / step);Secrets 与缓存一个仓库同时跑通 pre-commit 钩子和 GitHub Actions CI(含 runner 跑通截图)能在 git commit 时自动触发 lint;能写一份 ci.yml 完成 install → lint → test 三步;能在 PR 中看到 CI 状态徽章
6. 综合协作项目端到端协作流(首选开源 PR;备选 5 人模拟协作);分支策略、PR 模板、冲突解决、CI 集成见下文 §综合项目;含 README、复盘、PR 链接 / CI 截图第三方能按 README 复现完整流程;作者能用 15 分钟讲清分支策略、PR 模板、冲突解决、CI 设计取舍

第一周(每天 1.5~2 小时)

Day 1 环境约定:本计划统一使用 Git 官方版本(建议 ≥ 2.40);平台主线为 GitHub(PR / Review / Actions)。配置命令:

git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase true   # pull 时默认 rebase,避免多余 merge commit

SSH key 准备:ssh-keygen -t ed25519 -C "you@example.com",把 ~/.ssh/id_ed25519.pub 添加到 GitHub Settings → SSH and GPG keys。所有源码从 Day 1 起就遵守 Conventional Commits(feat / fix / docs / refactor / chore);当你已经能稳定写出规范 commit,再引入 husky + commitlint 作为进阶。

任务当天交付
Day 1装 Git;按上面四条 git config --global 配置;建 SSH key;新建空目录 git-playgroundgit init 后做第一次 commit(chore: init repo一份环境配置笔记(命令 + 输出)+ 一个空 commit 的仓库
Day 2add / commit / status / log / diff;练习工作区 / 暂存区 / 版本库三态切换(git add . / git restore --staged / git restore5 条 commit 的练习仓库 + 一份命令速查表
Day 3.gitignore 语法;git rm --cached;忽略已跟踪文件;git status --ignored一份能过滤 node_modules / .DS_Store / *.log.gitignore
Day 4git log --oneline --graph --decorate --allgit show <sha>git blame <file>git reflog 基础一份 log / show / blame 命令卡
Day 5Conventional Commits 规范;用 git commit -m 演练 feat / fix / docs / refactor / chore / test;写一个 README 的迭代史,每天提交一条至少 10 条规范 commit
Day 6三种撤销:git restore <file>(丢弃工作区修改)/ git restore --staged <file>(取消暂存)/ git reset --soft HEAD~1(撤销最近一次 commit,保留改动)一份撤销操作对比表 + 演练日志
Day 7项目:在 git-playground 里写一个完整 README.md 的迭代史(含 Day 1~7 学到的所有要点),最终凑齐 20 条 commit;自己 review 自己写的 PR 描述,列出至少 3 条“可改进项”一份可 push 的本地仓库 + 一份自查 PR 描述

Day 7 项目执行次序(避免一次堆叠)

第一周任务量大,按以下次序分两步推进;每一步独立可验证。

步骤 A —— 先打通最小可用版本(预计 60~90 分钟)

  1. git-playground 里写一个最小可用的 README.md(项目名、一句话说明、运行步骤);
  2. 用 5 条 commit 完成基础结构:chore: init / docs: add readme / feat: add basic usage / fix: typo / docs: add license
  3. git log --oneline 检查 5 条 commit 都存在;
  4. git status 必须 clean;无 git status --ignored 漏网文件。

步骤 B —— 按清单补齐 4 类边界 / 异常用例(预计 30~45 分钟)

在前一步基础上,按下面清单逐步补足 commit,并记录到 notes/week1-day7.md

#用例期望行为
B1误提交大文件 / 敏感信息(如临时 token)git reset --soft HEAD~1 撤销,再用 .gitignore 屏蔽
B2工作区有未保存改动,但需要切分支git stash push -m "wip" → 切分支 → git stash pop
B3commit message 写错了(如 fexat: typo)git commit --amend -m "feat: ..." 修正最近一条
B4想看历史是怎么改的git log -p <file> / git blame <file> / git reflog 至少跑通一遍

进阶检查(非首次门槛):当步骤 A、B 都稳定通过、且你能解释每个命令含义时,再叠加 husky + commitlint 作为进阶,强制 commit message 必须符合 Conventional Commits。第一周当天不必完成此步。

阶段通用验收(每一阶段都必须通过)

  1. 不看 cheatsheet 独立敲出本阶段核心命令;
  2. 用自己的话解释该命令“解决什么问题、为什么有效”;
  3. 画一张图:分支拓扑 / PR 时间线 / rebase 前后对比;
  4. 测试空仓库、单分支、多分支、冲突、远程断开等边界场景;
  5. 准备至少 3 组自定义数据 / 仓库并贴出实际输出或日志;
  6. 记录每个高风险命令(--force push、reset --hardrebase on 公共分支)的常见破坏后果;
  7. 能修改已有流程(加 hook、修 Action、调整 commit 规范),而不是只能照抄。

交付存放:第 3 项的图、第 5 项的输出截图 / 文本、第 6 项的风险日志,统一存到当前阶段对应项目目录的 notes/ 或 README 章节,例如阶段 3 远程协作的 PR 截图写在 stage3-remote-collab/notes/pr-screenshots/。不要散落在聊天记录或临时文件里,便于后续复盘与综合项目引用。

最终验收(学完全部六阶段后)

综合项目

首选:开源仓库 PR 实战(必做:向一个真实开源仓库提交 PR 并被合并)。
备选:5 人模拟协作(必做:邀请 4 位同伴,分配 3 个 feature 分支,通过 PR 合入 main)。

首选项目要求

备选项目要求

notes/ 与 README 存放规范

所有“分支拓扑图”、“PR 时间线截图”、“CI 跑通截图”、“冲突解决日志”类交付物统一存放在项目根目录的 notes/ 子目录或 README 的对应章节;提交时一并带上,避免散落在聊天或临时文件里。综合项目的 notes/ 至少包含:

任何综合项目都必须包含:

  1. 需求说明:要解决的真实问题 / 团队规模 / 角色分工;
  2. 分支策略说明:为什么这样切分支(main / dev / feature 的来源);
  3. PR 模板与 Review 记录:每个 PR 的描述、review 反馈、修改 commit;
  4. 冲突解决日志:至少 1 次手动解决冲突的完整步骤;
  5. CI 集成证据:GitHub Actions 跑通的截图或链接;
  6. README:项目介绍、运行步骤、目录结构、复盘(踩过的坑、可改进点);
  7. 复盘记录:用时、难点、收获、下一步。

推荐开源资料(按角色分工,避免堆链接)

阶段角色资料链接用法
1~2主线解释(交互式)Learn Git Branchinghttps://learngitbranching.js.org/浏览器内演练 branch / merge / rebase,建立命令直觉
1~3主线解释(中文书)Pro Git 中文版https://git-scm.com/book/zh/v2官方权威教材,按章节查概念
1~3命令参考Git 官方文档https://git-scm.com/docs查命令与参数,不通读
3平台参考GitHub Docshttps://docs.github.com/PR / Review / 保护分支流程
3实战(首次 PR)first-contributionshttps://github.com/firstcontributions/first-contributions5 分钟完成第一次 PR 的演练仓
3协作指南How to Contribute to Open Sourcehttps://opensource.guide/how-to-contribute/开源协作礼仪与流程
4改写历史Pro Git 第 7 章(Git 重写历史)https://git-scm.com/book/zh/v2/Git-工具-重写历史rebase / cherry-pick / reset 详解
5钩子框架pre-commithttps://pre-commit.com/用 Python 写 hook 配置,跨语言可用
5原生钩子huskyhttps://github.com/typicode/huskyNode 生态原生 Git 钩子,最常用
5增量 lintlint-stagedhttps://github.com/lint-staged/lint-staged只对暂存区文件跑 lint,节省时间
5CI 入门GitHub Actions 文档https://docs.github.com/en/actionsworkflow / job / step 三层结构
5Actions 示例actions/checkout / actions/setup-nodehttps://github.com/actions官方 action 市场
4~6可视化(可选)Visualizing Githttps://git-school.github.io/visualizing-git/命令前后图形化对比
1~6教学游戏(可选)Oh My Git!https://ohmygit.org/图形化教学,适合零基础

许可证提示:从 pre-commit、husky、lint-staged 等开源仓库复制或参考配置前,必须先打开其 LICENSE 文件确认许可证类型(MIT / Apache-2.0 / GPL 等)。GPL 类代码用于商业 / 闭源项目前请逐条阅读;MIT/Apache 在保留版权声明的前提下通常可直接使用。默认做法是读思路后自己重写配置,而不是复制粘贴 workflow。

源码阅读时机:Pro Git 第 7~10 章放到“阶段 3 远程协作完成之后”再深入读。原因是:前 3 阶段目标是建立“从 commit 到 PR”的独立操作能力;过早读历史改写章节会变成“会用 rebase —force”而非“理解协作纪律”。阶段 4 之后你已经能完成 PR,此时读改写章节才有意义。

默认使用顺序:先用 Learn Git Branching 建立分支直觉 → 用 Pro Git 中文版查概念 → 在本地真实仓库敲命令 → 在 first-contributions 完成首次 PR → 接 husky + GitHub Actions → 阶段 4 之后读 Pro Git 第 7 章 → 综合项目。

常见误区

所有知识点分类(统一规则)

后续新增主题时按此归类,再套用一页纸模板;一个主题可有一个主分类和一个辅助分类。本计划归属见最末行。

  1. 编程语言:C、Java、Python、JavaScript 等
  2. 数据结构与算法:排序、查找、图、DP 等
  3. 计算机基础:OS、网络、数据库、组成原理等
  4. 工程技术:Git、Linux、Docker、测试、CI/CD 等
  5. Web 与后端:HTTP、REST、Spring Boot、数据库开发等
  6. 前端与客户端:HTML/CSS、JavaScript、React、移动开发等
  7. 数据与人工智能:SQL、机器学习、深度学习、数据分析等
  8. 项目与职业能力:软件设计、调试、代码规范、技术写作等

本计划:工程技术 主 + 项目与职业能力 辅。


学习资料汇聚(v0.3)

本节是主题文件自包含的最后一节;不再依赖 notes/ 子目录。补足内容直接写在本节内,缺失处标 “由本计划生成”。外部图片或大型标准文档以链接 / 附件形式挂在本节。

由本计划生成 / Generated by this plan(本节内容基于公开资料的整理与示范;非第三方讲解的复制)。

9.1 背景与动机

9.2 概念地图

核心概念(≥5):

flowchart LR
    工作区((工作区))
    暂存区[(暂存区 / Index)]
    本地仓库[(本地仓库 .git)]
    远程仓库[(远程仓库 origin)]
    Commit[Commit 对象]
    Branch[Branch 引用]
    Tag[Tag 引用]
    Merge[Merge]
    Rebase[Rebase]
    CherryPick[Cherry-pick]
    Revert[Revert]
    Reset[Reset]
    Stash[Stash]
    Submodule[Submodule]
    Hook[Hook]
    Action[GitHub Actions]
    工作区 -->|git add| 暂存区
    暂存区 -->|git commit| 本地仓库
    本地仓库 -->|git push| 远程仓库
    远程仓库 -->|git pull / fetch| 本地仓库
    本地仓库 --> Commit
    Commit --> Branch
    Commit --> Tag
    Branch --> Merge
    Branch --> Rebase
    Commit --> CherryPick
    Commit --> Revert
    本地仓库 --> Reset
    工作区 --> Stash
    本地仓库 --> Submodule
    本地仓库 --> Hook
    远程仓库 --> Action

关系说明:

9.3 基础知识讲解

主推(评分 ≥4,命令行友好):

资料角色评分链接
Learn Git Branching交互式可视化4https://learngitbranching.js.org/
Pro Git 中文版官方权威教材4https://git-scm.com/book/zh/v2
Git 官方文档命令参考4https://git-scm.com/docs
GitHub Docs平台流程4https://docs.github.com/

备查(评分 3):

资料角色链接
first-contributions首次 PR 演练仓https://github.com/firstcontributions/first-contributions
How to Contribute to Open Source协作礼仪https://opensource.guide/how-to-contribute/
Conventional Commitscommit 规范https://www.conventionalcommits.org/zh-hans/
Visualizing Git命令对比图https://git-school.github.io/visualizing-git/
Oh My Git!教学游戏(可选)https://ohmygit.org/

缺失部分:本计划不重写第三方资料;如读者在“高级改写”阶段仍卡住,请按 §9.4 中的高风险命令清单逐条演练。

9.4 经典问题与经典案例

#问题为什么会重要最简答案
1“我的 commit 丢了!”reset --hard 后常见恐慌git reflog 找回 SHA,再 git reset --hard <sha>git cherry-pick <sha>
2“PR 提示有冲突”多人改同一文件必然发生git fetch origingit rebase origin/main(或 merge)→ 手动修冲突 → git rebase --continue
3“push 被拒”远程有新 commit,本地落后git pull --rebase,再 git push;不要直接 --force
4“同事的 commit 不见了”在公共分支 rebase 后强推立即联系同事恢复;此后只用 merge 或在自己分支 rebase
5“我想撤回已 merge 的 PR”main 已受影响git revert -m 1 <merge-sha> 生成反向 PR;不要 reset
6“commit message 写错了”常见小事故最近一条:git commit --amend -m "...";多条:interactive rebase
7“我不想 commit 全部改动,只想 commit 一半”部分提交常见git add -p 交互式暂存;或 git stash + git stash pop
8“我想看看谁改坏了这段代码”定位 bug 责任git blame <file> 定位行 → git show <sha> 看 commit → git log -p <file> 看历史
9“我换电脑了,怎么继续工作”多设备协作git clone + SSH key;或 git remote add 已存在的本地仓库
10“CI 一直挂,但本地能跑”环境差异常见看 Actions 日志,对比本地版本(Node / Python / 依赖 lock 文件)

9.5 学习难点

概念难点

难点为什么会卡突破路径
工作区 / 暂存区 / 本地仓库三态切换分不清git status 当仪表盘;用 git restore --staged 反复演练
分支只是指针把分支想成“文件夹”git log --oneline --graph --all 看真实拓扑
HEAD 与 detached HEADcheckout <sha> 后不知身在何处git switch 替代 checkout;HEAD 总指向当前 commit
fast-forward vs no-ff看不出区别自己开两条分支,一条 merge、一条 merge --no-ff,对比 log 拓扑

思维难点

难点为什么会卡突破路径
改写历史的代价不知道哪些操作会“破坏”同事牢记“已 push 的公共分支不能 rebase / reset / force-push”
reset 三种模式soft / mixed / hard 行为不同画三态图:soft 保留全部、mixed 重置暂存区、hard 重置工作区
revert 不删 commit想“撤销”却新增了一条提交理解“revert 是反向补丁”,在 main 上 revert merge 要用 -m 1
PR 与 commit 的关系不知道 PR 是 GitHub 的概念区分 Git 协议层(commit / branch)与平台层(PR / Review)

工程难点

难点为什么会卡突破路径
SSH key 配置Windows / macOS / Linux 路径不同ssh -T git@github.com 验证;agent forwarding 处理多账号
.gitignore 不生效文件已被跟踪git rm --cached <file> + 加入 .gitignore + commit
pre-commit 钩子不触发没装 / 权限不对chmod +x .git/hooks/pre-commit;或用 husky 管理
Actions 跑通但本地跑失败缓存 / 锁文件差异提交 package-lock.json / poetry.lock;Actions 用 cache: step
submodule 拉不下来嵌套仓库认证git submodule update --init --recursive;子模块 URL 用 SSH

9.6 技术标准与接口

9.6.1 Entity

名称版本发布组织状态许可证 / 可访问性
Git持续更新(≥2.40)Git 项目(Junio Hamano 维护)正式GPLv2
Git 协议 v22.18+Git 项目正式同上
GitHub持续更新GitHub, Inc.(Microsoft)正式闭源服务;免费层可用
Conventional Commits 1.0.01.0.0Conventional Commits 组织正式Creative Commons
pre-commit持续更新pre-commit.com正式MIT
husky9.xtypicode正式MIT
lint-staged持续更新lint-staged 组织正式MIT
GitHub Actions持续更新GitHub正式闭源服务;workflow 是 YAML

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级名称必须看到什么
L0知道存在知道 Git 是分布式 VCS;知道 GitHub 是托管平台
L1看得懂示例教程中看到 git commit -m "..." 不陌生
L2能正确调用能按文档完成 clone / branch / push / merge
L3能解释与排错能解释 PR 流程;能解决 merge conflict;能写最小 Actions workflow
L4能设计与扩展能设计团队分支策略;能为开源项目发规范 PR 并通过 Review

本计划目标:阶段 6 综合项目时达到 L3;能在真实开源仓库发 PR 时尝试 L4

9.6.6 Source

引用

直接依赖(1)

查看知识图谱 · 热度 🔥极高