# 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) | 同上 |