git开启一个新功能开发的流程

git开启一个新功能开发的流程

Git 开启新功能开发的流程需遵循分支管理规范(如 Git Flow、GitHub Flow),核心是隔离功能开发代码、避免影响主分支稳定性,同时兼顾协作效率。以下是通用且规范的流程(适配绝大多数团队场景),包含从分支创建到功能开发中关键操作的完整步骤:

一、前置准备:确保本地环境干净且最新

开始新功能前,先同步远程主分支代码,并清理本地未提交的变更,避免冲突:

# 1. 切换到主分支(通常是 main/master,稳定分支)
git checkout main

# 2. 拉取远程主分支最新代码(确保本地与远程同步)
git pull origin main

# 3. 检查本地是否有未提交的变更(可选但推荐)
git status
# - 若有未提交变更:
#   - 需保留:git stash 暂存,开发完成后用 git stash pop 恢复
#   - 无需保留:git checkout -- . 放弃所有本地修改(谨慎)

二、创建功能分支(核心步骤)

功能分支命名需规范(便于识别用途),推荐格式:feature/功能名称-版本/编号(如 feature/chat-api-v2feature/user-login-optimize):

# 创建并切换到新功能分支(-b = branch + checkout)
git checkout -b feature/chat-api-updates

# 验证分支是否创建成功
git branch  # 会看到当前分支为 feature/chat-api-updates

分支命名规范建议

  • 前缀统一:feature/(功能开发)、bugfix/(bug修复)、hotfix/(紧急修复);

  • 名称清晰:包含功能关键词(如 paylogin),避免无意义的数字/字母;

  • 团队统一:比如结合需求编号(feature/REQ-1234-user-profile)。

三、功能开发:高频操作(提交、暂存、同步)

开发过程中需规范提交,及时同步远程分支,避免后期冲突:

1. 常规开发与提交

# 1. 开发完成后,查看变更文件
git status

# 2. 暂存变更(按需选择,推荐精准暂存而非 git add .)
git add src/chat/api.js  # 暂存单个文件
git add src/chat/        # 暂存整个文件夹
# 如需取消暂存:git reset HEAD src/chat/api.js

# 3. 提交变更(提交信息需清晰,遵循规范)
git commit -m "feat(chat): 新增聊天接口参数校验"
# 提交信息规范(示例):
# - feat:新功能 | fix:修复bug | docs:文档 | style:格式 | refactor:重构 | test:测试 | chore:构建/工具
# - 格式:<类型>(<模块>): 描述(简洁,不超过50字)

2. 临时保存工作进度(未完成开发需切换分支时)

# 暂存当前未提交的修改(不会提交,仅临时保存)
git stash

# 切换回主分支处理其他事,处理完后切回功能分支,恢复暂存:
git stash pop  # 恢复最近一次暂存,并删除暂存记录
# 或 git stash apply  # 恢复暂存,保留暂存记录(可多次恢复)

3. 同步远程功能分支(多人协作同一功能时)

# 1. 首次推送功能分支到远程(创建远程分支)
git push -u origin feature/chat-api-updates
# -u:关联本地分支与远程分支,后续只需 git push 即可

# 2. 后续开发中,定期拉取远程功能分支的最新代码(避免与协作方冲突)
git pull origin feature/chat-api-updates

4. 解决冲突(拉取/合并时出现冲突)

# 1. 拉取代码后提示冲突,先查看冲突文件
git status  # 标记为 "both modified" 的文件即冲突文件

# 2. 打开冲突文件,手动解决冲突(查找 <<<<<<< HEAD 标记)
#    - <<<<<<< HEAD:本地代码
#    - =======:分隔符
#    - >>>>>>> feature/xxx:远程代码
#    保留正确代码,删除冲突标记后保存文件

# 3. 解决后,暂存冲突文件并提交
git add 冲突文件路径
git commit -m "fix(chat): 解决接口参数校验逻辑冲突"

四、功能开发完成:提测/合并前准备

1. 最终同步主分支代码(避免合并时冲突)

# 1. 切回主分支并拉取最新代码
git checkout main
git pull origin main

# 2. 切回功能分支,合并主分支最新代码(将主分支的更新同步到功能分支)
git checkout feature/chat-api-updates
git merge main
# 若合并时出现冲突,按上述“解决冲突”步骤处理

2. (可选)压缩提交记录(保持分支提交历史整洁)

如果功能开发过程中提交记录杂乱,可合并为少量清晰的提交:

# 合并最近N次提交(如合并最近5次,执行 git rebase -i HEAD~5)
git rebase -i HEAD~5
# 进入编辑界面,将除第一个提交外的 pick 改为 squash(合并),保存退出
# 编辑合并后的提交信息,完成后保存

五、功能验收:合并到主分支(或提MR/PR)

1. 团队协作场景:提合并请求(MR/PR)

主流代码托管平台(GitLab/GitHub/Gitee)推荐通过 Merge Request (MR) / Pull Request (PR) 合并,流程:

  1. 推送功能分支到远程:git push origin feature/chat-api-updates

  2. 在平台上新建 MR/PR,目标分支选择 main,源分支选择 feature/chat-api-updates

  3. 填写MR/PR描述(功能内容、测试要点、关联需求等),指定审核人;

  4. 审核通过后,执行合并(可选“合并后删除功能分支”)。

2. 本地直接合并(小型项目/个人开发)

# 1. 切回主分支
git checkout main

# 2. 合并功能分支到主分支
git merge feature/chat-api-updates --no-ff
# --no-ff:保留功能分支的提交历史(便于回溯,推荐添加)

# 3. 推送主分支到远程
git push origin main

# 4. (可选)删除本地/远程功能分支(功能已合并,无需保留)
git branch -d feature/chat-api-updates  # 删除本地分支
git push origin --delete feature/chat-api-updates  # 删除远程分支

六、特殊场景:功能开发中断/废弃

如果功能开发到一半需要暂停,或确认废弃:

# 1. 推送分支到远程备份(避免本地丢失)
git push origin feature/chat-api-updates

# 2. 废弃分支(可选):
# - 本地保留:仅切回主分支即可;
# - 标记废弃:在分支名后加 -deprecated(如 feature/chat-api-updates-deprecated);
# - 彻底删除:按上述“删除分支”步骤操作。

核心规范总结

  1. 分支隔离:功能开发必须在独立分支,禁止直接在主分支开发;

  2. 提交规范:提交信息清晰(类型+模块+描述),避免无意义的“update”;

  3. 及时同步:定期拉取主分支/协作方的功能分支代码,减少冲突;

  4. 合并审核:多人协作时,必须通过MR/PR审核后再合并,避免直接推主分支;

  5. 分支清理:功能合并后及时删除废弃分支,保持分支列表整洁。

该流程适配 Git Flow 核心思想(主分支稳定、功能分支隔离),同时兼容轻量化的 GitHub Flow,可根据团队规模(单人/多人)、项目复杂度调整(如小型项目可省略“压缩提交”“--no-ff”等步骤)。

使用 git rebase(变基)替代 git mergefeature/chat-api-updates 整合到 main 分支,核心优势是让提交历史更线性、整洁(无合并提交节点),适合追求干净提交记录的场景。以下是完整的操作步骤、原理说明和注意事项:

核心逻辑

git rebase 会将 feature/chat-api-updates 分支的所有提交,“重放”到 main 分支的最新提交之后,最终 main 分支的提交历史是一条直线(而非 merge 产生的分叉)。

操作步骤(推荐:先在功能分支变基,再合并到main)

步骤1:前置准备(确保 main 分支最新)

# 1. 切换到 main 分支
git checkout main

# 2. 拉取远程 main 最新代码(同步团队修改)
git pull origin main

# 3. 切回功能分支
git checkout feature/chat-api-updates

步骤2:将功能分支变基到 main 最新版本(核心)

# 把 feature/chat-api-updates 基于 main 最新提交重新构建
git rebase main
  • 此时 Git 会先“暂存”功能分支的所有提交,然后切换到 main 最新提交,再逐个“重放”功能分支的提交;

  • 若出现冲突:Git 会中断变基,提示 Resolve conflicts and then run "git rebase --continue",解决冲突步骤如下:

    # 1. 查看冲突文件
    git status
    
    # 2. 打开冲突文件,删除 <<<<<<<、=======、>>>>>>> 标记,保留正确代码并保存
    # 3. 暂存解决后的冲突文件
    git add 冲突文件路径
    
    # 4. 继续执行变基(完成剩余提交的重放)
    git rebase --continue
    
    # (可选)若想放弃变基,执行:git rebase --abort
    

步骤3:切换到 main 分支,快速合并功能分支

变基后,feature/chat-api-updates 的提交已经基于 main 最新版本,此时合并是“快进(fast-forward)”模式,无额外合并提交:

# 1. 切回 main 分支
git checkout main

# 2. 快进合并功能分支(此时 main 直接指向 feature 分支的最新提交)
git merge feature/chat-api-updates

# 3. 推送更新后的 main 到远程
git push origin main

步骤4:(可选)清理功能分支

# 删除本地功能分支
git branch -d feature/chat-api-updates

# 删除远程功能分支(团队确认无需保留)
git push origin --delete feature/chat-api-updates

直接在 main 分支 rebase 功能分支(不推荐,仅作参考)

也可直接在 main 分支执行 rebase,但风险更高(易污染主分支),仅适合单人开发:

# 1. 确保在 main 分支且已拉取最新代码
git checkout main
git pull origin main

# 2. 直接将 main 分支变基到功能分支(等价于“吸收”功能分支的提交)
git rebase feature/chat-api-updates

# 3. 推送(若变基后 main 提交历史改变,需强制推送,谨慎!)
git push origin main --force-with-lease
# --force-with-lease:比直接 --force 安全,仅当远程 main 无他人修改时强制推送

关键注意事项

  1. 禁止对公共分支(如 main)执行变基:如果 main 分支已推送到远程,且有其他团队成员基于该分支开发,变基会改写提交历史,导致他人代码冲突(这是 rebase 最核心的禁忌);

    • ✅ 正确用法:仅对本地私有分支(如 feature/xxx)执行 rebase main,再合并到 main;

    • ❌ 错误用法:直接对远程已共享的 main 分支变基。

  2. 变基冲突 vs 合并冲突

    • merge 仅需解决一次冲突(合并时);

    • rebase 可能需多次解决冲突(功能分支有 N 个提交,每个提交都可能冲突);

  3. 回滚难度更高:变基改写了提交历史,若合并后发现问题,回滚比 merge 更复杂(需用 git reflog 找回旧提交);

  4. 多人协作功能分支:如果 feature/chat-api-updates 已推送到远程且多人协作,也禁止对其变基(会导致他人的提交记录混乱)。

rebase 与 merge 对比(选择建议)

操作

提交历史

冲突处理

适用场景

git merge

保留分支分叉(有合并节点)

仅需解决一次冲突

多人协作、重视分支溯源

git rebase

线性整洁(无分叉)

可能多次冲突

单人开发、追求干净提交历史

总结:用 rebase 整合功能分支到 main 的核心流程是「功能分支 rebase main → main 快进合并功能分支」,既保证了 main 分支历史整洁,又规避了直接修改公共分支的风险。

Git 如何在保留历史的前提下取消对已提交文件夹的追踪 2025-12-31
Node包管理器使用-Npm、Pnpm 2025-12-31

评论区