Git 版本控制与工作流程
5326 字
预计阅读 22 分钟
Git 是现代软件开发中最重要的版本控制系统。掌握 Git 的核心概念和工作流程对于任何开发者都至关重要。
第一部分:Git 基础概念
1.1 Git 简介
Git 是一个分布式版本控制系统,具有以下特点:
- 分布式:每个开发者都有完整的代码历史
- 快速:大部分操作都在本地进行
- 数据完整性:使用 SHA-1 哈希确保数据完整性
- 分支管理:轻量级的分支创建和合并
1.2 核心概念
工作区、暂存区、版本库:
Plaintext
工作区 (Working Directory)
↓ git add
暂存区 (Staging Area)
↓ git commit
版本库 (Repository)
↓ git push
远程仓库 (Remote Repository)文件状态:
- 未跟踪 (Untracked):新文件,Git 不知道
- 已修改 (Modified):文件已修改但未暂存
- 已暂存 (Staged):文件已添加到暂存区
- 已提交 (Committed):文件已保存到版本库
第二部分:基础操作
2.1 仓库初始化
Bash
# 初始化新仓库
git init
# 克隆远程仓库
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git
# 查看仓库状态
git status
git status -s # 简洁输出2.2 文件操作
Bash
# 添加文件到暂存区
git add file.txt
git add . # 添加所有文件
git add *.js # 添加所有 js 文件
git add -A # 添加所有变更
# 提交更改
git commit -m "提交信息"
git commit -am "添加并提交" # 跳过暂存区
# 查看提交历史
git log
git log --oneline # 简洁格式
git log --graph # 图形化显示
git log --author="张三" # 按作者筛选2.3 撤销操作
Bash
# 撤销工作区修改
git checkout -- file.txt
git restore file.txt # Git 2.23+
# 撤销暂存区修改
git reset HEAD file.txt
git restore --staged file.txt # Git 2.23+
# 撤销提交
git reset --soft HEAD~1 # 保留修改在暂存区
git reset --mixed HEAD~1 # 保留修改在工作区
git reset --hard HEAD~1 # 完全撤销修改
# 修改最后一次提交
git commit --amend -m "新的提交信息"第三部分:分支管理
3.1 分支基础
Bash
# 查看分支
git branch # 本地分支
git branch -r # 远程分支
git branch -a # 所有分支
# 创建分支
git branch feature-login
git checkout -b feature-login # 创建并切换
git switch -c feature-login # Git 2.23+
# 切换分支
git checkout main
git switch main # Git 2.23+
# 删除分支
git branch -d feature-login # 安全删除
git branch -D feature-login # 强制删除3.2 分支合并
Bash
# 合并分支
git checkout main
git merge feature-login
# 变基合并
git checkout feature-login
git rebase main
git checkout main
git merge feature-login
# 压缩合并
git merge --squash feature-login
git commit -m "合并 feature-login 分支"3.3 冲突解决
Bash
# 查看冲突文件
git status
# 手动解决冲突后
git add conflicted-file.txt
git commit -m "解决合并冲突"
# 使用合并工具
git mergetool
# 取消合并
git merge --abort第四部分:远程仓库
4.1 远程仓库管理
Bash
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 修改远程仓库 URL
git remote set-url origin git@github.com:user/repo.git
# 删除远程仓库
git remote remove origin4.2 推送和拉取
Bash
# 推送到远程仓库
git push origin main
git push -u origin main # 设置上游分支
# 从远程仓库拉取
git pull origin main
git fetch origin # 只获取不合并
git merge origin/main # 手动合并
# 推送分支
git push origin feature-login
git push --set-upstream origin feature-login第五部分:团队协作工作流
5.1 Git Flow 工作流
Plaintext
main (生产分支)
├── develop (开发分支)
│ ├── feature/user-auth (功能分支)
│ ├── feature/payment (功能分支)
│ └── release/v1.2.0 (发布分支)
└── hotfix/critical-bug (热修复分支)分支说明:
- main:生产环境代码
- develop:开发环境代码
- feature/:功能开发分支
- release/:发布准备分支
- hotfix/:紧急修复分支
5.2 GitHub Flow 工作流
Bash
# 1. 从 main 创建功能分支
git checkout main
git pull origin main
git checkout -b feature/new-feature
# 2. 开发并提交
git add .
git commit -m "实现新功能"
# 3. 推送分支
git push origin feature/new-feature
# 4. 创建 Pull Request
# 在 GitHub 上创建 PR
# 5. 代码审查和合并
# 审查通过后合并到 main
# 6. 删除功能分支
git checkout main
git pull origin main
git branch -d feature/new-feature5.3 最佳实践
提交信息规范:
Bash
# 格式:<type>(<scope>): <subject>
git commit -m "feat(auth): 添加用户登录功能"
git commit -m "fix(payment): 修复支付金额计算错误"
git commit -m "docs(readme): 更新安装说明"
git commit -m "style(header): 调整导航栏样式"
git commit -m "refactor(utils): 重构工具函数"
git commit -m "test(auth): 添加登录功能测试"分支命名规范:
Bash
# 功能分支
feature/user-authentication
feature/payment-integration
# 修复分支
bugfix/login-error
hotfix/security-patch
# 发布分支
release/v1.2.0
release/2024-q1第六部分:高级技巧
6.1 交互式变基
Bash
# 交互式变基最近 3 个提交
git rebase -i HEAD~3
# 在编辑器中可以:
# pick:保留提交
# reword:修改提交信息
# edit:修改提交内容
# squash:合并到前一个提交
# drop:删除提交6.2 储藏 (Stash)
Bash
# 储藏当前修改
git stash
git stash save "临时修改"
# 查看储藏列表
git stash list
# 应用储藏
git stash apply
git stash apply stash@{1}
# 弹出储藏
git stash pop
# 删除储藏
git stash drop stash@{1}
git stash clear # 清空所有储藏6.3 标签管理
Bash
# 创建标签
git tag v1.0.0
git tag -a v1.0.0 -m "版本 1.0.0"
# 查看标签
git tag
git show v1.0.0
# 推送标签
git push origin v1.0.0
git push origin --tags
# 删除标签
git tag -d v1.0.0
git push origin --delete v1.0.0第七部分:故障排除
7.1 常见问题
撤销已推送的提交:
Bash
# 方法1:创建反向提交
git revert HEAD
# 方法2:强制推送(危险)
git reset --hard HEAD~1
git push --force-with-lease origin main恢复删除的分支:
Bash
# 查找分支的最后提交
git reflog
# 恢复分支
git checkout -b recovered-branch <commit-hash>清理仓库:
Bash
# 清理未跟踪文件
git clean -f
git clean -fd # 包括目录
# 垃圾回收
git gc
git gc --aggressive总结
掌握 Git 的关键要点:
- 理解核心概念:工作区、暂存区、版本库的关系
- 熟练基础操作:add、commit、push、pull 等命令
- 掌握分支管理:创建、合并、删除分支
- 选择合适工作流:根据团队规模选择工作流程
- 遵循最佳实践:规范的提交信息和分支命名
- 学会故障排除:处理冲突和恢复数据