直接在master分支上开发功能,等于把未经验证的代码混入生产基线。一旦某个功能只完成一半,master就可能处于无法编译或无法发布的状态。正确做法是在每次开发新功能、修复缺陷或做实验性改动前,从最新的master切出一个独立分支。这个分支拥有独立的提交记录,你可以自由提交、回滚、推送,等代码稳定后再合并回master。下面围绕这条工作流展开,覆盖创建、同步、合并和异常处理。

为什么独立分支是协作的基础
master分支通常代表项目的稳定版本,很多团队的持续集成和自动部署都直接监听master。如果开发者都往master提交,几个人的改动会频繁交叉,冲突概率急剧上升。独立分支的第一个价值是隔离:你的半成品代码不会影响别人,别人的改动也不会打断你。第二个价值是可审查。将独立分支推送远端后,可以在合并前发起Pull Request或Merge Request,让同事检查代码质量、逻辑和测试覆盖。第三个价值是回滚成本低。分支上的提交如果方向错了,可以直接删除分支重新开始,主分支完全不受影响。
此外,分支还支持并行开发。不同功能可以同时从master切出多个分支,彼此独立推进。只要合并时做好同步,团队就能在不阻塞彼此的情况下高速迭代。对于刚接触Git协作的人来说,最需要改变的习惯就是把master当作只读基线,一切改动都从分支开始。
从master创建独立分支的标准命令
创建分支前必须保证本地master与远程仓库一致。初学者经常直接基于过期的本地master切分支,开发完成后才发现依赖的公共代码已经变了。正确顺序如下:先切到master,拉取远程更新,再创建新分支。命令为:
git checkout master git pull origin master git checkout -b feature/user-login
其中git checkout -b会基于当前master的最新提交创建并切换到新分支。分支命名建议使用feature/功能名、bugfix/问题编号或hotfix/紧急修复这样的前缀,便于识别分支用途。如果你希望这个分支在远端也能被协作,需要推送并设置上游跟踪:
git push -u origin feature/user-login
执行后,本地分支与远程分支建立跟踪关系,后续直接使用git push或git pull即可。注意不要直接推送master,除非你已经确认当前分支不是master。
开发过程中的提交与同步策略
在独立分支上开发,提交粒度很重要。每次提交应该只完成一个逻辑变化,避免把十几个不同修改塞进一次提交。这样可以更方便地定位问题、进行代码评审,也便于用git revert精准回滚。提交前先用git status查看改动文件,用git diff检查具体内容,然后选择性添加:
git status git diff git add src/login.js git commit -m "实现登录接口参数校验"
开发过程中master可能已经前进,你的分支会逐渐落后。合并回master前需要先同步。同步有两种方式:merge和rebase。merge会把master的新提交合并进当前分支,产生一个合并提交;rebase会把当前分支的提交重新放到master最新提交之后,历史更线性。推荐在个人开发分支上使用rebase,保持提交历史清晰:
git fetch origin git rebase origin/master
如果rebase过程中发生冲突,Git会暂停并提示冲突文件。手动解决冲突后执行git add 冲突文件,再执行git rebase --continue继续。如果想放弃本次rebase,可以执行git rebase --abort,分支会回到rebase前的状态。注意,如果分支已经推送到远端并且有其他人在使用,不要轻易rebase,因为会改写提交历史,导致他人拉取时出现问题。尚未共享的分支可以放心使用rebase。
合并回master与清理分支
独立分支开发完成并通过测试后,需要合并回master。先切回master并拉取最新代码,再执行合并。推荐使用--no-ff参数保留分支合并记录,即使可以快进也生成一个合并提交,这样能清楚看到哪些提交属于哪个功能:
git checkout master git pull origin master git merge --no-ff feature/user-login git push origin master
如果团队使用Pull Request流程,则不需要本地合并。将分支推送到远端后,在GitLab、GitHub或Gitee等平台创建合并请求,由审查人通过后由平台完成合并。无论哪种方式,合并完成后都要及时删除分支,避免远端和本地堆积大量废弃分支。删除本地分支使用git branch -d feature/user-login,删除远端分支使用git push origin --delete feature/user-login。如果本地分支包含未合并的提交,-d会拒绝删除,此时需要确认是否遗漏合并;确实不需要这些提交时再用-D强制删除。
处理合并冲突是分支管理中不可避免的一环。当master和你的分支同时修改了同一文件的同一区域,Git无法自动合并,会在文件中标记冲突段。冲突段看起来类似:
<<<<<<< HEAD int count = 10; ======= int count = 20; >>>>>>> feature/user-login
解决冲突时删除冲突标记,保留需要的内容,保存文件后执行git add和git commit完成合并提交。如果要终止合并,可以执行git merge --abort。最好在合并前先用git diff master...feature/user-login预览两个分支的差异,提前发现潜在冲突。