一、代码提交(Commit)
-
提交步骤
- 添加改动到暂存区
git add <file/directory> # 添加指定文件/目录 git add . # 添加所有改动(包括新文件、修改、删除) - 提交到本地仓库
git commit -m "描述性提交信息" # 提交并添加简短说明 git commit -v # 提交并查看详细改动内容
- 添加改动到暂存区
-
提交规范
- 约定式提交(Conventional Commits)
推荐格式:类型(作用域): 描述,如:feat(auth): 添加用户登录功能 fix(api): 修复订单接口500错误 docs: 更新README安装说明 - 类型参考:
feat(新功能)、fix(修复)、docs(文档)、style(格式)、refactor(重构)、test(测试)、chore(杂项)。
- 约定式提交(Conventional Commits)
-
忽略文件(.gitignore)
- 在项目根目录创建
.gitignore,排除临时文件、日志、依赖等,如:*.log node_modules/ .env
- 在项目根目录创建
二、分支管理(Branching)
-
常用操作
- 创建/切换分支
git branch <branch-name> # 创建分支 git checkout <branch-name> # 切换分支 git switch <branch-name> # (Git 2.23+) 更安全的切换命令 git checkout -b <branch-name> # 创建并切换分支 - 查看分支
git branch -a # 查看所有分支(本地+远程) git branch -v # 查看分支最新提交
- 创建/切换分支
-
合并与变基
- 合并分支(Merge)
git checkout main # 切换到目标分支(如main) git merge feature-branch # 合并feature分支到main- 保留分支历史,生成合并提交。
- 变基(Rebase)
git checkout feature-branch git rebase main # 将feature分支的提交变基到main最新提交后- 使历史线性化,避免冗余合并提交。注意:不要在公共分支(如main)上使用!
- 合并分支(Merge)
-
冲突解决
- 冲突文件会标记为
Unmerged paths,手动编辑后标记为已解决:git add <resolved-file> # 标记冲突已解决 git commit # 完成合并/变基提交
- 冲突文件会标记为
三、分支策略(常见工作流)
-
Git Flow
- 分支类型:
main:稳定版(生产环境)develop:开发主线feature/*:新功能分支release/*:预发布分支hotfix/*:紧急修复分支
- 适用场景:定期发布、版本控制严格的项目。
- 分支类型:
-
GitHub Flow
- 核心规则:
main分支始终可部署。- 新功能通过
feature/*分支开发,合并前需通过测试和Code Review。
- 适用场景:持续交付的Web应用。
- 核心规则:
-
GitLab Flow
- 引入环境分支(如
production、staging),通过上游优先原则合并。
- 引入环境分支(如
四、远程协作
-
推送与拉取
- 推送分支到远程
git push -u origin <branch-name> # 首次推送并关联远程分支 - 获取远程分支
git fetch origin # 获取远程更新 git pull origin <branch-name> # 拉取并合并(= fetch + merge)
- 推送分支到远程
-
删除分支
- 本地分支
git branch -d <branch-name> # 删除已合并的分支 git branch -D <branch-name> # 强制删除未合并分支 - 远程分支
git push origin --delete <branch-name>
- 本地分支
五、标签(Tag)管理
- 创建标签
git tag -a v1.0.0 -m "正式发布版本1.0.0" # 创建附注标签 git push origin v1.0.0 # 推送标签到远程
六、最佳实践
- 分支命名
- 清晰明确,如
feature/user-auth、fix/header-styling。
- 清晰明确,如
- 提交原子化
- 每个提交只做一件事,避免混杂多个修改。
- 及时清理分支
- 合并后删除无用的本地/远程分支,保持仓库整洁。
- 善用
git stash- 临时保存未提交的改动:
git stash # 暂存当前工作 git stash pop # 恢复最近暂存内容
- 临时保存未提交的改动: