[git 提交 main uat dev]

这是一个很好的 Git 工作流问题!让我给你分析一下:

🔄 三分支工作流分析
你的工作流:dev_01 → uat → main

📊 Merge vs Rebase 对比
Merge(合并)
优点:

✅ 保留完整历史,可以看到合并点
✅ 不重写历史,更安全
✅ 适合公共分支(uat、main)
✅ 可以清楚看到功能分支的开发时间线
缺点:

❌ 会有 merge commit(如果分叉)
❌ 历史稍显复杂
Rebase(变基)
优点:

✅ 线性历史,更清晰
✅ 避免不必要的 merge commit
✅ 更容易定位问题(线性追踪)
缺点:

❌ 重写历史,改变 commit hash
❌ 在共享分支上很危险(可能影响他人)
🎯 推荐策略
根据你的工作流,我建议混合使用:

1. dev_01 → uat: 使用 Rebase ⭐

# 在 dev_01 分支
git checkout dev_01
git rebase uat  # 将 dev_01 的提交变基到 uat 上
git checkout uat
git merge dev_01  # 快进合并
为什么用 Rebase?

uat 是测试环境,dev_01 是你自己的开发分支
保持线性历史,更容易追踪问题
没有协作风险(你自己用)
2. uat → main: 使用 Merge ⭐⭐⭐

# 在 main 分支
git checkout main
git merge uat --no-ff  # 使用 --no-ff 创建 merge commit
为什么用 Merge?

✅ --no-ff (no fast-forward) 会创建合并节点
✅ 保留发布历史,清楚看到什么时候 uat 合并到 main
✅ 更安全,不会破坏 main 分支的历史
✅ 方便回滚,可以轻松 revert 整个合并
✅ 符合团队协作最佳实践
💡 最佳实践总结
操作	推荐方式	原因
dev_01 → uat	Rebase	保持线性,你自己用,安全
uat → main	Merge + --no-ff	保留发布历史,安全,可回滚
🔧 具体操作示例
场景 1: dev_01 测试通过 → 合并到 uat

# 1. 确保在 dev_01 分支
git checkout dev_01

# 2. 先拉取 uat 最新代码
git fetch origin uat

# 3. Rebase 到 uat(保持线性)
git rebase origin/uat

# 4. 如果有冲突,解决后继续
git add .
git rebase --continue

# 5. 推送到远程(需要 force,因为是 rebase)
git push origin dev_01 --force-with-lease

# 6. 切换到 uat,合并 dev_01
git checkout uat
git merge dev_01  # 快进合并
git push origin uat
场景 2: uat 验证完成 → 发布到 main

# 1. 切换到 main
git checkout main

# 2. 合并 uat(使用 --no-ff)
git merge uat --no-ff

# 3. 打标签(可选,但推荐)
git tag -a v1.0.0 -m "Release v1.0.0"

# 4. 推送到远程
git push origin main
git push origin --tags
⚠️ 重要原则
永远不要 Rebase 公共分支(uat、main 已推送的)
--no-ff 对 main 很重要,保留合并节点
定期同步:dev_01 经常 rebase uat,避免大量冲突
发布前打标签,方便回滚和版本管理
posted @ 2026-01-29 16:25  十三山入秋  阅读(3)  评论(0)    收藏  举报