# 1.什么是Git
Git是一个分布式版本控制系统,用于跟踪文件更改并协调多人协作开发项目。
# 2.Git的主要特点
- 分布式系统:每个开发者都有完整的代码仓库副本
 - 高效性能:大多数操作在本地完成,速度快
 - 数据完整性:使用SHA-1哈希确保数据不被篡改
 - 分支模型:轻量级分支使得分支操作非常高效
 - 暂存区:允许选择性提交文件的部分更改
 
# 3.Git vs SVN (集中式版本控制系统)
| 特性 | Git | SVN | 
|---|---|---|
| 架构 | 分布式 | 集中式 | 
| 速度 | 快(本地操作) | 慢(网络依赖) | 
| 分支 | 轻量级 | 重量级 | 
| 离线工作 | 支持 | 不支持 | 
| 存储方式 | 快照 | 差异 | 
# 4.Git核心概念
- Git工作流程
 
- 工作目录(Working Directory):本地文件系统
 - 暂存区(Staging Area/Index):准备提交的更改
 - 本地仓库(Local Repository):提交历史
 - 远程仓库(Remote Repository):共享的中央仓库
 
- Git对象模型
 
- Blob:存储文件内容
 - Tree:存储目录结构和文件名
 - Commit:存储提交信息、作者、时间等
 - Tag:为特定提交打标签
 
- Git引用
 
- HEAD:当前所在的分支或提交
 - 分支(Branch):指向特定提交的可变指针
 - 标签(Tag):指向特定提交的不可变指针
 
# 5.git add、git commit和git push的区别
git add 将工作目录的更改添加到暂存区
 git commit 将暂存区的更改记录到本地仓库
 git push 将本地仓库的更改推送到远程仓库
# 6.merge和rebase的区别
merge:保留历史,创建新的合并提交
 rebase:重写历史,将更改应用到目标分支最新提交之后
 merge更安全,rebase能创建更线性的历史
# 7.什么是.gitignore文件?
指定Git应忽略的文件和目录模式
常用于忽略日志、临时文件、依赖目录等
# 8.什么是Git钩子(git hooks)?
- 在特定Git操作前后自动执行的脚本
 - 存储在.git/hooks目录中
 - 常用钩子:
pre-commit,post-commit,pre-push等 
# 9.分支命名规范
- 功能分支(Feature Branches)
 
- 格式:feature/<开发者>-<功能描述> 或 feat/<功能名>
 - 示例:feature/john-user-auth、feat/payment-gateway 适用场景:开发新功能时从 develop 或 main 分支创建,开发完成后合并回主分支。
 
- 修复分支(Fix/Bugfix Branches)
 
- 格式:fix/<问题描述> 或 bugfix/
<issue-id> - 示例:fix/login-error、bugfix/issue-123 适用场景:修复线上或测试环境发现的 Bug,完成后合并回 develop 或 main。
 
- 发布分支(Release Branches)
 
- 格式:release/<版本号> 或 release-
<YYYYMMDD> - 示例:release/v1.2.0、release-20240504 适用场景:用于版本发布前的最后测试和修复,最终合并到 main 并打 Tag。
 
- 热修复分支(Hotfix Branches)
 
- 格式:hotfix/<问题描述> 或 hotfix-
<issue-id> - 示例:hotfix/db-connection-fail、hotfix-issue-456 适用场景:紧急修复生产环境 Bug,从 main 创建,修复后合并回 main 和 develop。
 
# 10.多人协作最佳实践
- 定期同步主分支:
 
- 每天开始开发前,先 git pull --rebase 更新本地代码。
 
- 小步提交,频繁合并:
 
- 避免长时间不合并,减少冲突概率。
 
- 使用 Pull Request(PR)/ Merge Request(MR):
 
- 在 GitHub/GitLab 上发起 PR,进行 Code Review 后再合并。
 
- 删除已合并的分支:
 
- 避免分支堆积,保持仓库整洁:
 
git branch -d feature/login  # 删除本地分支
git push origin --delete feature/login  # 删除远程分支
 1
2
2
- 避免直接 Push 到 main/develop:
 
- 强制通过 PR/MR 合并,确保代码质量。
 
# 11.git pull vs git merge
| 特性 | git pull | git merge | 
|---|---|---|
| 本质 | git fetch(下载远程最新代码) + git merge(合并到当前分支) 的组合命令 | 单纯合并分支 | 
| 使用场景 | 从远程仓库同步最新代码 | 合并任意两个分支(本地或远程) | 
| 是否涉及远程 | 必须指定远程分支 | 可合并本地分支 | 
| 默认行为 | 自动合并(相当于 git merge) | 需手动指定目标分支 | 
| 冲突处理 | 直接在当前工作区触发冲突 | 需先切换到目标分支再合并 | 
| 历史记录 | 可能产生合并提交(Merge Commit) | 同上 |