Git创建合并分支、多人协作
除了git add、git commit、git push、git pull等基础操作,我们也要了解掌握以下关于git的几种常见功能。
一、创建与合并分支
基础概念:为什么需要分支?
分支是 Git 的核心功能,本质是独立的代码开发线,主要作用有 3 个:
- 隔离开发:在不影响主代码(如
main分支)的前提下,开发新功能或修复 bug。 - 并行协作:多人同时开发不同功能,各自在自己的分支操作,互不干扰。
- 版本回溯:若分支开发失败,可直接删除,不会影响主分支代码。
常用分支类型:
main/master:主分支,存放正式上线的代码,禁止直接在上面修改。develop:开发分支,团队日常协作的基础分支,从main分支创建。feature/xxx:功能分支,开发新功能时创建,从develop分支创建,完成后合并回develop。bugfix/xxx:修复分支,修复开发中的 bug,从develop创建,完成后合并回develop。
核心操作:创建与合并分支步骤
1. 分支创建与切换
先确保本地代码与远程同步(可选但推荐),再创建并切换到新分支。
| 操作目标 | 命令 | 说明 |
| 查看当前分支 | git branch | 带*的是当前所在分支 |
| 新建分支(不切换) | git branch 分支名 | 例:git branch feature/login |
| 新建并切换到分支 | git checkout -b 分支名 | 旧版 Git 命令,一步完成创建 + 切换 |
| 新建并切换到分支(新版) | git switch -c 分支名 | 新版 Git 推荐命令,更直观 |
| 切换到已有分支 | git checkout 分支名 / git switch 分支名 | 例:git switch develop |
2. 分支开发与提交
在新分支开发完成后,需要提交修改到本地仓库。
- 查看修改内容:
git status(确认哪些文件被修改) - 添加修改到暂存区:
git add 文件名(单个文件)或git add .(所有修改文件) - 提交到本地仓库:
git commit -m "提交说明"(说明要清晰,例:git commit -m "完成登录功能:添加账号密码验证")
3. 分支合并(关键步骤)
开发完成后,需将功能分支合并到目标分支(如develop)。
以 “将feature/login合并到develop” 为例:
- 切换到目标分支:
git switch develop(必须先切到要合并进的分支) - 拉取最新代码(避免冲突):
git pull origin develop(同步远程最新的develop代码) - 执行合并:
git merge 功能分支名(例:git merge feature/login) - 推送合并结果(若需同步远程):
git push origin develop
常见问题:合并冲突处理
当两个分支修改了同一文件的同一部分时,Git 无法自动合并,会提示 “冲突(Conflict)”。
1. 识别冲突
合并时若出现类似提示,说明有冲突:
Auto-merging src/login.js
CONFLICT (content): Merge conflict in src/login.js
Automatic merge failed; fix conflicts and then commit the result.2. 解决冲突步骤
- 打开冲突文件(如
src/login.js),Git 会用特殊标记标注冲突部分:
- 手动修改代码:删除标记,保留正确的内容(例:保留
const loginBtnText = "立即登录";) - 标记为已解决:
git add 冲突文件名(例:git add src/login.js) - 完成合并:
git commit -m "解决登录功能合并冲突:统一登录按钮文本"
实用技巧:分支管理补充
- 删除本地分支:功能合并后,可删除无用分支,
git branch -d 分支名(例:git branch -d feature/login) - 强制删除未合并分支:若分支开发废弃,需强制删除,
git branch -D 分支名(注意:此操作不可恢复) - 临时保存工作区:切换分支前若有未提交的修改,可先用
git stash暂存,切换后用git stash pop恢复。
二、多人协作
(一)多人协作核心原则
多人协作的本质是 “共享远程仓库,通过分支同步代码”,核心原则有 3 点:
- 远程仓库(如 GitHub/GitLab)是 “中央枢纽”,所有成员通过它同步代码。
- 禁止直接修改远程主分支(
main/master),需通过 “功能分支 + 合并请求” 流程提交代码。 - 频繁同步:开发中定期拉取远程最新代码,减少合并冲突。
(二)多人协作基础流程(必看)
假设团队共享远程仓库https://github.com/team/project.git,以 “开发新功能并合并到主分支” 为例:
1. 初始化:克隆远程仓库到本地
首次参与项目时,先把远程仓库克隆到本地:
git clone https://github.com/team/project.git # 克隆仓库到本地
cd project # 进入项目目录
2. 日常开发:创建分支并提交代码
每人在独立分支开发,避免直接修改main:
# 1. 确保本地main分支与远程同步(每次开发前先做)
git switch main # 切换到主分支
git pull origin main # 拉取远程main最新代码(关键:避免基于旧代码开发)# 2. 创建自己的功能分支(从main分支创建)
git switch -c feature/yourname/xxx # 例:feature/zhangsan/login(含姓名,方便追溯)# 3. 开发并提交代码(小步提交,每次提交只做一件事)
git add . # 添加修改
git commit -m "feat(login): 添加验证码输入框" # 提交说明(规范见下文)# 4. 推送到远程自己的分支(首次推送需关联远程分支)
git push -u origin feature/zhangsan/login # -u:关联本地与远程分支,后续直接git push即可3. 同步更新:拉取他人已合并的代码
如果其他人已向main提交了新代码,需同步到自己的分支,避免冲突:
# 切换到自己的功能分支
git switch feature/zhangsan/login# 拉取远程main的最新代码并合并到当前分支
git pull origin main # 等价于:git fetch origin main + git merge origin/main# 若合并时有冲突,按“分支合并冲突处理”步骤解决(见上一篇笔记),解决后提交:
git add .
git commit -m "merge: 同步main最新代码,解决登录模块冲突"
git push # 推送更新到远程自己的分支4. 完成开发:提交合并请求(PR/MR)
功能开发完成后,通过远程仓库(如 GitHub)提交 “合并请求”,让团队审核:
- 登录远程仓库(如 GitHub),找到自己的分支
feature/zhangsan/login。 - 点击 “New pull request”(PR),选择目标分支为
main。 - 填写说明(功能描述、测试情况等),指派审核人。
- 审核通过后,由管理员合并到
main分支(合并后可删除功能分支)。
(三)协作关键操作:远程仓库交互
| 操作目标 | 命令 | 说明 |
| 查看远程仓库信息 | git remote -v | 显示远程仓库地址(origin 是默认别名) |
| 拉取远程分支最新代码 | git pull origin 远程分支名 | 例:git pull origin develop(拉取远程 develop 并合并到本地当前分支) |
| 推送本地分支到远程 | git push origin 本地分支名 | 首次推送加-u关联,后续直接git push |
| 跟踪远程新分支 | git switch -c 本地分支名 origin/远程分支名 | 远程新增分支后,本地创建对应分支并跟踪 |
| 查看远程分支列表 | git branch -r | 显示所有远程分支(前缀 origin/) |
| 删除远程分支 | git push origin --delete 远程分支名 | 例:git push origin --delete feature/old(需权限) |
(四)协作规范:减少混乱的核心
1. 分支命名规范
统一格式,方便识别用途和负责人:
- 功能分支:
feature/姓名/功能名(例:feature/lisi/payment) - 修复分支:
bugfix/姓名/问题描述(例:bugfix/wangwu/login-error) - 紧急修复:
hotfix/问题编号(例:hotfix/BUG-123,直接从 main 创建)
2. 提交信息规范
用结构化描述,方便追溯历史:
# 格式:类型(模块): 具体描述(英文冒号+空格)
git commit -m "feat(购物车): 支持批量删除商品" # 新功能
git commit -m "fix(订单): 修复支付后状态未更新问题" # 修复bug
git commit -m "docs: 更新API文档中的参数说明" # 文档修改
git commit -m "refactor(用户): 重构登录验证逻辑(无功能变更)" # 代码重构3. 代码审查(PR/MR)规范
- 提交 PR 前:确保本地已同步远程目标分支最新代码,且通过本地测试。
- PR 描述:说明 “做了什么”“改了哪些文件”“测试方式”,附相关截图(如 UI 修改)。
- 审核要点:代码风格、逻辑正确性、是否有冗余代码、是否影响现有功能。
(五)常见协作问题处理
1. 本地修改与远程冲突(拉取时出错)
场景:自己修改了文件 A,别人也修改了文件 A 并已合并到远程 main,拉取时冲突。
解决步骤:
# 1. 暂存本地未提交的修改(避免丢失)
git stash # 暂存工作区修改# 2. 拉取远程最新代码(此时无冲突,因为本地修改已暂存)
git pull origin main# 3. 恢复暂存的修改,并解决冲突
git stash pop # 恢复后可能出现冲突# 4. 打开冲突文件,按“<<<<<<< HEAD”标记手动解决,然后提交
git add .
git commit -m "merge: 解决与远程main的冲突"2. 误推代码到远程分支
场景:不小心把错误代码推到了远程功能分支。解决:本地修改后强制推送(仅自己的分支可用,禁止对公共分支用--force):
# 本地修改并提交正确代码
git add .
git commit -m "fix: 修正误提交的错误代码"# 强制推送覆盖远程分支(仅自己的分支!)
git push --force origin feature/yourname/xxx3. 远程分支被删除,本地残留
场景:远程功能分支已被删除,但本地仍能看到。解决:清理本地无效的远程分支跟踪信息:
git fetch --prune # 同步远程删除的分支,本地自动清理无效跟踪(六)实用技巧:提升协作效率
- 定期 “小步提交”:每次修改少量代码就提交,减少单次合并的冲突范围。
- 用
git fetch先看更新:不确定远程修改是否影响自己时,先 fetch 再查看:
git fetch origin main # 拉取远程main最新代码到本地origin/main(不合并)
git diff origin/main # 对比本地当前分支与远程main的差异- 避免多人改同一文件:分工时明确模块负责人,修改前沟通是否有人正在修改目标文件。
遵循这些流程和规范,能大幅减少多人协作中的代码冲突和沟通成本。
