什么是Git工作流?¶
在多人协作开发中,Git不仅是一个版本控制工具,更是团队协作的“交通规则”。工作流(Workflow)就是大家约定好的一套提交代码、合并分支、管理版本的规则。它能让代码提交有序、追踪问题简单,避免多人同时修改同一文件导致的混乱。
常用分支策略(简化版)¶
对于初学者,最推荐的是简化版Git Flow,核心思想是:
- 主分支(通常叫main或master):永远保持可部署的稳定代码,只接受合并完成的功能。
- 功能分支:从主分支创建,用于开发新功能或修复bug,每个功能独立一个分支。
- 合并规则:功能完成后,通过合并到主分支发布,合并前需测试。
必学基础命令(附场景)¶
| 命令 | 作用 | 场景举例 |
|---|---|---|
git clone <仓库地址> |
克隆远程仓库到本地 | 第一次获取项目代码 |
git checkout -b <分支名> |
创建并切换到新分支 | 创建功能分支:git checkout -b feature/login |
git add . |
将修改的文件暂存 | 开发完代码后,先暂存所有改动 |
git commit -m "提交信息" |
提交暂存的内容 | 写清楚改动:git commit -m "完成登录表单UI" |
git status |
查看工作区状态 | 随时检查是否有未提交的改动 |
git pull origin <主分支> |
拉取主分支最新代码 | 确保功能分支与主分支同步 |
git merge <分支名> |
合并分支 | 把功能分支合并到主分支 |
git push origin <分支名> |
推送分支到远程仓库 | 把本地分支推到GitHub/GitLab等平台 |
完整工作流步骤(以「开发登录功能」为例)¶
1. 准备工作:确保主分支最新¶
假设主分支叫main,先确认本地main分支是最新的,避免创建分支时遗漏最新代码:
# 切换到main分支
git checkout main
# 拉取主分支最新代码(如果是远程仓库)
git pull origin main
2. 创建功能分支¶
从main分支创建一个功能分支(比如开发登录功能),命名建议:feature/功能名:
git checkout -b feature/login
这条命令等价于:
git branch feature/login(创建分支)+git checkout feature/login(切换分支)
3. 开发与提交代码¶
在feature/login分支上写代码,完成后提交:
# 查看改动了哪些文件
git status
# 暂存所有改动(也可以用git add <文件名>单独暂存)
git add .
# 提交并写清晰的提交信息
git commit -m "实现登录表单输入框和按钮"
提交信息小技巧:写清楚“做了什么”,比如“修复登录按钮点击无反应”“添加验证码逻辑”,方便后续回滚或查看历史。
4. 同步主分支更新(避免冲突)¶
如果主分支有其他人提交了新代码(比如修复了主分支的bug),需要把主分支更新拉到功能分支,避免合并时冲突:
# 先切回主分支拉取最新代码
git checkout main
git pull origin main
# 再切回功能分支,合并主分支更新
git checkout feature/login
git merge main
如果没有冲突,Git会自动合并;如果有冲突,终端会提示“Automatic merge failed”,见「冲突解决」部分。
5. 推送功能分支到远程仓库¶
功能分支开发完成后,推送到远程仓库,方便团队协作查看:
git push origin feature/login
推送到远程后,可在GitHub/GitLab的网页端看到这个分支,此时可发起「合并请求(PR)」到主分支。
6. 合并到主分支(发布)¶
团队代码审查通过后,将功能分支合并到主分支:
- 本地合并(若直接在终端操作):
# 切换到主分支
git checkout main
# 合并功能分支
git merge feature/login
# 推送合并后的主分支到远程
git push origin main
- 通过PR合并(团队协作更常用):在GitHub/GitLab网页上,从
feature/login分支发起PR,选择合并到main分支,合并后删除功能分支。
7. 清理已完成的分支¶
合并完成后,删除本地和远程的功能分支,保持仓库整洁:
# 删除本地功能分支
git branch -d feature/login
# 删除远程功能分支(推送到远程)
git push origin --delete feature/login
冲突解决(新手必看)¶
冲突发生场景:多人同时修改了同一文件的同一行,Git无法自动决定保留哪份代码。
解决方法:
1. Git会提示冲突文件(如login.js),打开文件后找到冲突标记:
<<<<<<< HEAD(当前分支的代码)
const username = "admin";
=======(分割线)
const username = "user";
>>>>>>> feature/login(待合并分支的代码)
- 手动编辑文件,决定保留哪部分代码(或修改合并逻辑),删除冲突标记
<<<<<<<、=======、>>>>>>>。 - 保存文件后,标记为已解决并提交:
git add login.js
git commit -m "解决登录功能分支与主分支的冲突"
总结与注意事项¶
- 分支命名规范:主分支
main,功能分支feature/xxx,bug修复分支bugfix/xxx,保持清晰。 - 提交前检查:用
git status确认改动文件,避免提交不该提交的内容(如临时文件)。 - 小步提交:每次只提交“一个小功能”,方便追踪问题,比如“实现登录框布局”“修复密码框样式”分开提交。
- 主分支永远干净:只合并已测试通过的代码,禁止直接在
main分支写代码或提交。
掌握这个流程后,你就能用Git高效管理代码版本,让团队协作更顺畅。遇到问题时,多查git --help或Git官方文档,逐步熟悉命令的用法~