分支协作流程——从 init 到 merge

知识库
知识库文档
/tech-stacks/git/examples/分支协作流程——从 init 到 merge.md

文档

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

信息

路径
/tech-stacks/git/examples/分支协作流程——从 init 到 merge.md
更新时间
2026/5/31