Nico
Published on 2025-11-27 / 3 Visits
0
0

分支开发原则

核心原则是:让分支的“生命周期”尽可能短,并保持与主分支的持续同步。

以下是最佳实践和详细操作步骤,遵循这些可以极大程度地减少合并时的痛苦。

一、最佳实践(预防冲突的根本)

  1. 基于最新的主分支创建功能分支

    • 命令:
      # 1. 首先确保本地 main 分支是最新的
      git checkout main
      git pull origin main
      
      # 2. 基于最新的 main 创建并切换到新功能分支
      git checkout -b feature/your-awesome-feature
      
    • 为什么? 这确保了你的起点是所有已知代码,而不是一个陈旧的版本,从源头上减少了未来合并的差异。
  2. 保持功能分支与主分支的同步(定期变基)

    • 这是最关键的一步。在开发过程中,主分支(main)可能已经有了其他人的更新。你需要定期把这些更新“拉”到你的功能分支上,而不是等到最后才处理。
    • 命令:
      # 在 feature 分支上操作
      git fetch origin main         # 获取远端 main 分支的最新 commit,但不合并
      git rebase origin/main        # 将你的 commits “变基”到最新的 main 之上
      
      # 如果发生冲突,Git 会提示你。解决冲突后:
      git add .                      # 标记冲突已解决
      git rebase --continue          # 继续变基过程
      
    • 为什么用 rebase 而不是 merge
      • rebase 会将你的提交“重新播放”在主线的最新节点上,使得历史记录是一条直线,非常整洁,没有多余的合并提交。
      • 相比之下,如果频繁使用 git merge origin/main,会在你的功能分支里产生大量“合并提交”,使历史记录变得复杂混乱。
    • 注意rebase 会重写历史,所以只对你本地、尚未推送到远端的个人分支使用
  3. 提交原子化,注释清晰

    • 每次提交(Commit)只做一件小事(例如:完成一个函数、修复一个bug、添加一个文档)。清晰的提交信息有助于回顾代码和定位问题。
  4. 推送到远程备份并协作

    • 定期将你的功能分支推送到远程仓库,既是备份,也方便同事查看。
    • 命令:
      git push -u origin feature/your-awesome-feature # 第一次推送时用 -u 设置上游
      git push                                       # 之后推送直接用
      

二、合并功能分支到主分支(解决冲突的最后一步)

当你完成开发,并且测试通过后,就可以合并了。通常有两种方式:

方式一:使用 Merge Request / Pull Request (推荐)

这是团队协作的标准流程,提供了代码审查的机会,是保证代码质量的重要环节。

  1. 确保你的分支是最新的:再次执行上面的 git fetchgit rebase origin/main 操作,解决可能出现的所有冲突。这是你的责任。
  2. 推送到远程分支
    git push origin feature/your-awesome-feature
    
  3. 在 GitLab/GitHub 等平台创建 Merge Request (MR) 或 Pull Request (PR)
  4. 请求同事进行代码审查。同事可能会提出修改意见。
  5. 根据审查意见,在本地分支修改并再次提交推送。PR/MR 会自动更新。
  6. 审查通过后,由你或项目负责人点击“合并”。平台通常会提供三种合并方式:
    • Create a merge commit:生成一个合并提交,历史记录清晰显示分支的合并点。这是最常用、最安全的方式。
    • Squash and merge:将你分支上的所有提交“压扁”成一个新的提交,再合并到 main。适合琐碎的提交历史。
    • Rebase and merge:将你的提交变基后直接线性地添加到 main 分支的头部。历史最干净,但要求分支本身很整洁。

方式二:本地合并后推送(小型项目或单人使用)

  1. 切到 main 分支并更新
    git checkout main
    git pull origin main
    
  2. 合并功能分支
    git merge feature/your-awesome-feature
    
  3. 解决冲突(如果提示有):
    • Git 会标记出冲突的文件。用编辑器打开文件,找到 <<<<<<<, =======, >>>>>>> 标记的地方,手动修改代码来解决冲突。
    • 解决后,添加文件并提交:
      git add .
      git commit -m "merge feature/your-awesome-feature"
      
  4. 推送到远程
    git push origin main
    
  5. 删除无用分支(可选):
    # 删除本地分支
    git branch -d feature/your-awesome-feature
    # 删除远程分支
    git push origin --delete feature/your-awesome-feature
    

总结:避免冲突的黄金法则

阶段 操作 目的
开始前 git pull origin main -> 基于最新 main 切分支 从最新起点开始
开发中 定期 git fetch && git rebase origin/main 持续集成最新变更,分散解决冲突
提交前 最终 rebase 一次,确保无冲突 为合并做最后准备
合并时 通过 Pull Request 进行代码审查 提高代码质量,再次检查冲突
合并后 删除已合并的功能分支 保持仓库整洁

记住,冲突并不可怕,它是多人协作的必然产物。通过频繁的 rebase 和早发现早解决的原则,你可以让冲突变得易于管理。


Comment