开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
实际开发中完整的Git操作流程
基本流程
1、拉取远程仓库内容,和远程仓库建立连接(HTTPs或者SSH均可),通常是git pull origin master或者使用git clone命令也行。
# 建立本地仓库和远程仓库的连接
git remote add origin [远程仓库地址]
# 拉取共有分支内容
git pull origin master
# 也可以使用clone,把项目克隆到本地,默认是master分支。如果没有指定本地文件夹地址,则默认clone到当前文件夹。
git clone [远程仓库地址] [本地文件夹地址]
2、从主分支master上新建一个私有分支(用于某一模块或业务的开发),并切换到这个私有分支。
# 创建新分支
# git checkout -b <分支号>
# 示例:创建分支编号为zcj_20220718_test的新分支
git checkout -b zcj_20220718_test
3、在私有分支上进行开发,然后推送到远程私有分支。
# 在当前的私有分支上进行add、commit等操作
# 添加git-merge-zcj_20220703_test.txt文件(zcj_20220718_test)
git add git-merge-zcj_20220703_test.txt
# 提交git-merge-zcj_20220703_test.txt文件到本地仓库
git commit -m "提交说明"
# 把本地的分支推送到远程仓库
git push origin <分支号>
# 示例:把本地的zcj_20220718_test分支推送到远程的zcj_20220718_test分支
git push origin zcj_20220718_test
4、业务开发完成时,切换到dev分支,然后将私有分支合并到dev分支,再将dev分支push到原远程。
# 切换到dev分支,dev在此之前需要手动拉取
git checkout dev
# 合并已经开发完成的zcj_20220718_test私有业务分支
git merge zcj_20220718_test
5、将dev分支推送到远程。
# 推送dev分支到远程
git push origin dev
6、dev通过后可以利用类似方式再将私有分支分支合并到test分支,test通过后合并到master分支
上述git pull
的操作也可以添加--rebase
来整理分支结点。
XXXX科技公司实际开发流程
切记: 所有的业务开发必须从master上check分支,切记,必须,不然后续会出现无法合分支的问题,需要大量的工作量修复;
业务分支命名规范:开发者名称_开发年月日_业务功能,如:dujiang_20220620_contract_info;
开发中必须在开发分支上开发,不可以在公有分支上开发,公有分支包括dev,test,master;
业务分支开发完成后(或者需要调试时),需要push到远程分支中;
业务分支需要测试,需要将业务分支merge into到dev分支中,再将dev分支push到远程;
业务分支需要上线,需要一次将业务分支merge into到test,master分支中,再将test,master分支push到远程;
再次切记: 公有分支(dev,test和master),只用于合并分支,push,pull,不可以进行开发,也不可以把dev和test分支的内容merge into任何业务分支中;
分支合并
所有的业务分支都是直接合并到公有分支上的,不是业务分支merge到dev、dev分支merge到test、test分支merge到master;
而是业务分支先拉取远程代码,然后本地最新代码推送到远程,业务分支先merge到dev分支并推送到远程dev之后,经过自测,然后才能把业务分支merge到test并推送到远程test之后,最后经过测试人员测试,才能把业务分支merge到master。
例如业务分支zcj_20221120_contract,流程:
- zcj_20221120_contract分支merge到dev经过验证;
- zcj_20221120_contract分支merge到test经过验证;
- zcj_20221120_contract分支merge到master;
上述操作的一个原因就是:
通常会有多个研发小组进行开发,但都需要在dev环境上进行自测,因此都会推送自己当前的业务分支到dev上,但通常互不影响(不涉及到操作公共的文件就不会有冲突),但这个自测进度是不同步的,而且某个业务分支合并上去之后可能会有问题;此时,如果把dev直接合并到test则很有可能会把一些有问题的提交合并上去,不利于排查问题,同一时间可能会有不同业务分支上的提交;为避免这种问题就不采用dev合并到test的操作。
注意事项
私有分支开发
在企业开发的过程中,往往是一个人开发一个业务作为一个开发的私有分支,例如zhangsan_20220720_login;但很多时候有些业务比较复杂并不是一个人完成的,而是由一个小组完成,这个时候就需要以小组为单位新建一个私有分支,例如group1_20220720_userStatistic,所有的小组成员均在这个分支上开发,完成拉取,推送等工作。这样做的 原因如下:
针对复杂业务,如果每一个人都拉取自己的私有分支开发小模块,这其中可能会涉及到多人对同一份文件修改,比如xxxMapper.xml文件(不同小模块的业务对同一张表进行操作),如果都在自己的私有分支上开发,拉取、推送都不会有任何问题。但是,经过一段时间,最终小模块的业务开发完成,进行merge时,那么多人修改过的同一份文件就会发生冲突,且由于时间久远不好解决冲突。所以,为避免这种情况可以选择以一个小组为单位进行拉取和推送代码,在本地解决冲突。
拉取远程分支
场景描述
当前项目被拉取到本地,但是现在线上有了新的业务分支需要拉取到本地。
执行命令
1、先拉取远程分支
git fetch origin develop(develop为远程仓库的分支名)
2、从远程分支拉取代码到本地并新建一个本地分支
git checkout -b develop(本地分支名称) origin/develop(远程分支名称)
更新本地分支
场景描述
master分支更新,本地业务分支需要master上的新代码,需要拉取新的代码到本地。
执行命令
在业务分支
zhangchaojie_20220926_myContractLibrary
拉取远程分支master
git pull origin master
一种方式就是直接在当前分支拉去远程master的最新代码。
问题
文档中合并远程分支到本地,远程分支的名称需要是"远程仓库别名 分支名",例如git merge origin/zcj_20220703_test;如果报错,则尝试"远程仓库别名/分支名",例如 git merge origin/zcj_20220703_test;