文档
Git 例程:分支协作完整流程
目标
实操 Git 核心流程:init → add → commit → branch → merge → tag,覆盖单人开发到多人协作。
完整操作
# ═══ 初始化 ═══
git init my-project
cd my-project
# ═══ 第一次提交 ═══
echo "# My Project" > README.md
git add README.md # 加入暂存区
git commit -m "feat: 初始化项目"
# ═══ 查看状态与历史 ═══
git status # 工作区状态
git log --oneline --graph # 提交历史(图形化)
# ═══ 创建功能分支 ═══
git checkout -b feature/login # 创建并切换
echo "function login() {}" > auth.js
git add auth.js
git commit -m "feat: 添加登录函数"
echo "function logout() {}" >> auth.js
git add auth.js
git commit -m "feat: 添加登出函数"
# ═══ 切回主分支 ═══
git checkout main
git log --oneline # feature/login 的提交不在这里!
# ═══ 合并分支 ═══
git merge feature/login # fast-forward 或三方合并
# 如果没有冲突,自动完成
# ═══ 模拟冲突 ═══
git checkout -b feature/config
echo "const HOST = 'localhost'" > config.js
git add config.js && git commit -m "config: 本地配置"
git checkout main
echo "const HOST = 'production'" > config.js
git add config.js && git commit -m "config: 生产配置"
git merge feature/config # ⚠️ 冲突!
# 手动编辑 config.js 解决冲突标记
# <<<<<<< HEAD
# const HOST = 'production'
# =======
# const HOST = 'localhost'
# >>>>>>> feature/config
echo "const HOST = process.env.HOST || 'localhost'" > config.js
git add config.js
git commit -m "merge: 解决配置冲突"
# ═══ 打标签 ═══
git tag v1.0.0 -m "首次发布"
git tag # 查看所有标签
# ═══ 查看差异 ═══
git diff HEAD~1 # 与上一次提交的差异
git diff main feature/login # 分支间差异
# ═══ 回退操作 ═══
# 撤销工作区修改(未 add)
git checkout -- config.js
# 撤销暂存区(已 add 未 commit)
git reset HEAD config.js
# 撤销最近一次提交(保留修改)
git reset --soft HEAD~1
# ═══ 切出某个提交(detached HEAD) ═══
git checkout <commit-hash>
git checkout main # 回来
分支策略速查
| 策略 | 说明 |
|---|---|
| Git Flow | main + develop + feature/release/hotfix |
| GitHub Flow | main + feature branches + PR |
| Trunk-Based | main 直接提交 + 短命分支 + feature flag |
.gitignore 示例
node_modules/
dist/
.env
*.log
.DS_Store
关键要点
- 暂存区让 commit 更精细(只提交部分修改)
- 分支是廉价指针——大胆创建和删除
- rebase vs merge:rebase 保持历史线性但重写历史;merge 保留真实合并记录
git stash临时保存未提交修改,切换分支后git stash pop