自己在网站学的
比较形象一点:
基础
git commit(创建并指向新的子节点) 与 parent节点, git branch, git checkout(换*),简洁版本(git checkout -b ),
git merge(差不多把对面分支连到自己身上,)
git rebase 对面(把自己搞个副本作为对面子级)
进阶:
分离head:head,直接checkout目前分支所指的记录,head就指过去了
相对引用:checkout 目标^(把目标移动到目标的父级,或者~1),感觉有点单向链表,结构体指针的味道,分支是命名指针,head是指向指针的指针,commit链就是单向链表
git branch -f(force) main HEAD3 main强制指向 (head的父级上3个单位),(不需要换过去分支,便捷)
git reset head1 ,回到父级,但是子级还在但是未加入暂存区,对于远程无效
git revert head(当前*), 一个新的提交,引入了更改,状态与上上级相同,远程有效
最后一个 git pull,让gpt来:
git fetch 只更新远程指针,不动你本地分支。从远处拿过来,
git pull fetch + merge(最常用)
git pull –rebase fetch + rebase(让你的提交排在远程节点后面)
git push 把你本地的节点推到远程(相当于反向传递链表)。
gpt5写的教程
适用对象与课程目标
本教程面向刚会 add/commit/push 的初学者,目标是帮助你成长为能够独立管理分支、解决冲突并通过 Pull Request 参与团队协作的开发者。全篇采取“知识讲解 + 实验操作步骤 + 练习任务”的方式,强调“版本控制思想”和“团队协作习惯”。
一、Git 基础与原理
什么是版本控制?为什么要用 Git?
- 版本控制:记录文件随时间的变化,支持回退、对比、协作。
- Git 的优势:分布式(每个人都有完整历史)、分支轻量、性能好、生态成熟(GitHub/GitLab 等)。
Git 的本地与远程仓库关系图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 开发者A本地 远程仓库(GitHub/GitLab/Cursor Cloud) ┌────────────────┐ ┌───────────────┐ │ 工作区 (WD) │ git add │ origin │ └──────┬─────────┘ ───────────────► │ (remote repo) │ │ └──────┬────────┘ │ git commit │ ▼ │ ┌────────────────┐ │ │ 暂存区 (Index) │ │ └──────┬─────────┘ │ │ 写入历史 │ ▼ │ ┌────────────────┐ git push / git fetch/pull │ │ 本地仓库 (Repo)│ ◄───────────────────────────────┘ └────────────────┘
|
核心思想:工作区修改先进入暂存区,提交到本地仓库形成历史,再与远程仓库同步。
实验:创建一个本地仓库,添加文件并进行首次提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| mkdir git-lab && cd git-lab
git init
echo "Hello Git" > README.md
git add README.md
git commit -m "chore: init repository with README"
git log --oneline
|
练习任务
- 修改
README.md,追加一行文本;
- 运行:
1 2 3 4 5 6
| git status git diff git add README.md git diff --staged git commit -m "docs: update README with description" git log --oneline --graph --decorate --all
|
二、核心命令详解
讲解与实操:add / commit / status / push / pull
- git status:当前改动状态(未跟踪、已修改、已暂存)。
- git add <文件>:把工作区改动加入暂存区;
-A/. 为批量添加。
- git commit -m “…”:把暂存区改动写入历史,形成一个快照。
- git remote add origin :添加远程仓库别名
origin。
- git push -u origin main:首次将
main 推送到远程并建立跟踪关系。
- git pull:从远程拉取并合并;等价于
git fetch + git merge。
实验:模拟本地修改、推送、远程查看结果
1 2 3 4 5 6 7 8 9 10 11 12
|
git remote add origin <your-repo-url>
git branch -M main
git push -u origin main
|
练习:撤销修改 / 查看历史
1 2 3 4 5 6 7 8 9 10
| git checkout -- README.md
git reset HEAD README.md
git log --oneline --decorate --graph --all git show HEAD~1 git diff HEAD~1..HEAD
|
三、分支管理(Branch)
分支的意义与命名规范
- 独立开发、并行协作、降低互相影响。
- 建议命名:
- 功能:
feature/<short-name>,如 feature/login
- 修复:
fix/<short-name> 或 bugfix/<short-name>,如 fix/ui-overflow
- 发布:
release/<version>,如 release/1.2.0
- 热修复:
hotfix/<short-name>
常用命令:branch / checkout / switch / merge / rebase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| git checkout -b feature/login
git branch git branch -r git branch -a
git checkout main git merge feature/login
git checkout feature/login git fetch origin git rebase origin/main
|
提示:团队一般约定在发起 PR 前使用 rebase 同步主干,保持历史整洁;或使用平台提供的“Squash and merge”。
实验:创建 feature/login 分支并合并回 main
1 2 3 4 5 6 7 8 9 10 11 12
| git checkout -b feature/login echo "Login page" > login.md git add login.md git commit -m "feat(login): add login page draft"
git checkout main git merge feature/login
git push origin main
|
练习:解决一次简单冲突
- 在
main 和 feature/conflict-demo 分支中,分别修改同一文件同一行并提交;
- 尝试将
feature/conflict-demo 合并回 main,感受冲突并解决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| git checkout -b feature/conflict-demo echo "line-from-feature" > conflict.txt git add conflict.txt && git commit -m "feat: add conflict line"
git checkout main echo "line-from-main" > conflict.txt git add conflict.txt && git commit -m "feat: add conflict line in main"
git merge feature/conflict-demo
git add conflict.txt git commit -m "merge: resolve conflict in conflict.txt"
|
四、团队协作与 Pull Request(PR)
PR 的意义
- 在 GitHub/GitLab/Cursor Cloud 上,PR/MR 是“把某分支的修改提请合并到目标分支”的协作流程载体。
- 提供代码差异、历史、检查状态与讨论区,是团队沟通与质量把关的核心。
教学步骤:创建新分支 → 推送 → 发起 PR → 代码审查 → 合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| git checkout -b feature/docs-onboarding echo "Onboarding" > docs/onboarding.md git add . git commit -m "docs: add onboarding doc"
git push -u origin feature/docs-onboarding
|
PR 描述模板示例
1 2 3 4 5 6 7 8 9 10 11 12
| ## 变更内容 - 描述本次变更做了什么,影响哪些模块
## 背景/动机 - 为什么要改?关联的 issue 或用户问题
## 检查清单 - [ ] 本地自测通过 - [ ] 更新了文档/注释 - [ ] 兼容性/安全性评估
## 截图/录屏(可选)
|
练习任务
- 两名成员分别在各自分支提交改动,互相创建 PR 并进行 Review,至少各写 2 条有建设性的评论(可包含命名建议、边界条件、测试建议等)。
五、冲突与回滚
冲突的原理
- 当两人修改“同一文件的同一行”或“相邻区域”,Git 无法自动合并,需要人工决策。
- 冲突文件中会出现冲突标记:
<<<<<<<、=======、>>>>>>>。
实验:手动制造冲突并解决
参考第三章“练习:解决一次简单冲突”的步骤。
revert 与 reset 的区别与使用场景
- git revert :创建一个新的提交,用“反操作”抵消指定提交。安全、可溯源,适合已推送到共享仓库的回滚。
- git reset:移动分支指针到历史某点;
--soft:仅移动指针,保留暂存区与工作区;
--mixed(默认):清空暂存区,保留工作区改动;
--hard:同时丢弃暂存区和工作区改动(危险)。
- 团队协作中,优先使用
revert;只有在个人分支、未推送的情况下才考虑 reset --hard。
练习:用 revert 撤销一次错误提交
1 2 3 4 5 6 7 8
| git log --oneline
git revert <commit_id>
git push
|
六、Tag 与版本发布
什么是 tag?为什么要打版本号?
- Tag 是对某个提交打上的“里程碑”标签,常用于版本发布(如
v1.0.0)。
- 便于回溯、对比与生成发布说明。
实验:创建 v1.0 标签并推送
1 2 3 4 5 6 7 8 9
| git tag v1.0.0
git tag -a v1.0.0 -m "release: v1.0.0"
git push origin v1.0.0 git push origin --tags
|
练习:查看某版本差异
1 2
| git diff v1.0.0..v1.1.0 git log v1.0.0..v1.1.0 --oneline --decorate
|
七、最佳实践与规范
Commit Message 规范(示例:Conventional Commits)
- 常用类型:
feat 新功能、fix 修复、docs 文档、refactor 重构、test 测试、chore 杂务。
- 示例:
1 2 3
| feat(login): support email-based authentication fix(api): handle empty payload on /users docs(readme): add quick start section
|
分支命名规范
feature/login、bugfix/ui-overflow、hotfix/payment-timeout、release/1.3.0。
团队协作建议:如何做 Code Review
- 聚焦:可读性、正确性、边界条件、测试覆盖。
- 语气:客观、具体、可执行;多用建议式语言。
- 小步提交:更易审查与回滚。
- 对安全/性能/兼容性修改要明确标注并请求更多关注。
实验任务:在一个虚拟项目中模拟完整协作流程
- A 初始化仓库并推送
main;
- B fork(或直接 clone 有权限的仓库);
- A 新建
feature/a,B 新建 feature/b,各自提交并推送;
- 双方各自发起 PR,互相 Review;
- 合并 PR 到
main,打 v1.0.0 标签并推送;
- 产出一次 Release Note(可手写或用平台自动生成)。
PR 模板(可放在 .github/pull_request_template.md)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| ## 变更类型 - [ ] Feat - [ ] Fix - [ ] Docs - [ ] Refactor - [ ] Test - [ ] Chore
## 变更说明 -
## 风险与验证 - 风险点: - 验证方式:
## 关联 Issue Closes #123
|
八、进阶内容(选学)
Git Flow vs GitHub Flow 简介
- GitHub Flow:主干
main + 短生命周期功能分支 + PR + 持续部署。简单、适合持续交付。
- Git Flow:
develop 主开发分支 + feature/* + release/* + hotfix/*,规约清晰,适合有版本节奏的产品。
选择建议:小团队或频繁上线用 GitHub Flow;多团队协作、严格发布节奏用 Git Flow。
常见问题与故障排查
1 2 3
| git fetch origin git rebase origin/main git push
|
- 合并时产生大量无关差异:检查换行符/文件权限;配置
.gitattributes:
1
| git checkout -b feature/x origin/feature/x
|
1
| git checkout <commit_id> -- path/to/file
|
推荐阅读与工具
- 书籍:Pro Git(免费英文版)、Git 权威指南。
- 插件/工具:VS Code GitLens、SourceTree、Fork、GitKraken、GitHub Desktop。
- 平台:GitHub、GitLab、Cursor Cloud(均支持 PR/MR 工作流与保护规则)。
结语与延伸
版本控制的本质是“可追溯的协作”。工具只是手段,习惯才是关键:小步提交、写清描述、善用分支与 PR、勤做 Review 与回滚演练。在真实项目中持续实践,才是掌握 Git 的唯一途径。
课程完成后你将掌握的能力
| 能力 |
说明 |
| 初始化与基本提交 |
独立完成 init/add/commit/status 与本地历史查看 |
| 远程协作 |
配置 remote,完成 push/pull/fetch 并处理常见拒绝问题 |
| 分支管理 |
创建/切换/合并/变基,遵循分支命名规范 |
| 冲突解决 |
读懂冲突标记,手动合并并验证 |
| 回滚策略 |
正确区分 revert 与 reset 并在合适场景应用 |
| 版本发布 |
创建/推送 Tag,比较版本差异并生成发布说明 |
| PR 工作流 |
发起 PR、撰写描述、参与 Code Review 并选择合并策略 |
| 团队规范 |
使用规范的 Commit Message、PR 模板与 Review 建议 |