在软件开发中,多人协作是一项必不可少的任务。而 Git 作为目前最受欢迎的分布式版本控制工具,提供了强大的功能和灵活的工作流程,使得多人协作开发变得更加高效。本篇博客将带你实践如何正确使用 Git 进行多人协作开发
在本篇博客中,你将学到以下内容:
Git分支策略允许开发人员在一个项目上进行协作,同时跟踪更改并维护多个版本的代码库。主流的分支管理策略有 Trunk-Based Development、Feature Branching、Git Flow等等,本文将基于较为简单的 Feature Branching
分支管理策略展开。虽然分支管理策略多种多样,但最好的策略一定是与你的团队特征和项目需求相匹配的。
在实际开发中,master 分支非常强调环境的稳定性。因此当我们要开发新的功能或者特性时,需要从 master 分支上拉取 feacture 分支,这样开发者就能在 feacture 分支上独立开发而不影响主分支。当完成开发后,需要提交 pull request
将 feacture 分支合并回 master 分支中。 通过 pull request
,仓库中的其他成员能对即将 merge 的代码进行审核并提出建议,从而保证了安全可靠性。
feacture
分支:feacture 分支一定是从 master 分支上拉取的feacture
分支上完成开发:通常一个分支就对应着一个特定的功能pull request
:请求将分支合并回 master 分支下面将结合具体的例子为大家逐步骤实践上面的流程,同时带大家体会多人在单分支上开发和在多分支上开发的区别
场景:开发者A在创建分支前就克隆过远程仓库,而开发者B则在创建分支后才克隆远程仓库
在实际开发中,如果要进行多人协作开发,首先需要将其他成员添加进来
创建分支的方式有两种:
git push origin xxx
在远端创建一个与本地 xxx 分支对应的 xxx 分支git branch -r
指令可以查看远程仓库中的所有分支,但是对于开发者A而言只能看到 master 分支feacture
分支前克隆远程仓库的,因此当前是落后于远程仓库的最新版本。我们需要使用 git pull
指令来更新分支信息:🎯[说明]:
git pull
指令具有以下两个作用:
- 拉取远程分支中的最新提交,并自动合并 (需要建立追踪关系)
- 更新远程仓库的分支信息(不需要建立追踪关系)
如何理解建立追踪关系呢?git pull 指令的完整用法是 git pull <远程主机名> <远程分支名>:<本地分支名>,当我们完整使用 git pull 指令时,不需要考虑建立追踪关系的问题,而当我们简写为 git pull
时,本地分支默认为当前的工作分支,远程分支为与之建立链接的远程分支。当我们 clone
远程仓库时其实自动建立了本地master分支与远程master分支的追踪关系——即链接,因此我们可以采用简写的方式。
📌[建议]: 在开发前首先使用 git pull
指令,确保从最新版本开始开发
在windows上模拟开发者B:
开发者A:
在本地创建 feacture 分支,并与远端的 origin/feacture 分支建立连接
feacture
分支并切换到 feacture
分支上,并建立远端 feacture 分支的追踪关系feacture
分支已经与远端的 origin/feacture
分支建立了连接在 feacture 分支上完成开发,并提交到远端的 origin/feacture 分支上
开发者B:
在本地创建 feacture 分支,并与远端的 origin/feacture 分支建立连接
当我们尝试push到远端仓库时发生了冲突,原因是远端仓库的版本比我们当前的版本高(因为开发者A完成了push操作),我们首先需要 pull
远端仓库的分支内容,解决完冲突后才能再次 add + commit + push
📌[建议]: 在开发前首先使用 git pull
指令,确保从最新版本开始开发
因为我们已经建立了本地 feacture 分支与远端 feacture 分支的链接,所以可以直接使用 git pull
指令拉取
手动解决冲突,从当前版本和远程仓库中的版本选择一个
重新 add + commit + push。此时我们就可以顺利推送到远程仓库了
合并分支也有两种方式:
pull request
,通过代码审验后合并到 master 分支事先声明,方法一是更被推荐的。出于教学的考虑,在单分支的版本中,先带大家用用方法二
完成合并后,就可以将没用的 feacture 分支删除。删除分支也有两种方式:
这里先为大家呈现第一种删除方式:
git branch -r
指令仍然能看到 origin/feacture,此时我们需要使用 git pull --prune
指令进行修剪多人在单分支上协作开发时,经常需要解决冲突的问题;而使用多分支,各个开发者在各自的分支上独立开发,只需要在最后合并分支时解决冲突即可
feacture-1
分支下编写文件file1。开发者B在 feacture-2
分支下编写文件file1、file2前面提到,创建分支的方式有两种:
git push origin xxx
在远端创建一个与本地 xxx 分支对应的 xxx 分支我们现在采用第二种方式创建分支:
开发者A:
在本地创建 feacture-1 分支。此时在创建本地分支时,我们不能再指定与远程分支 orgin/feacture -1 建立连接,因此此时远程仓库中并没有这个分支
执行 git push origin feature-1
,Git 会将本地的 feature-1 分支推送到 origin 远程仓库中的相应分支。如果远程仓库不存在名为 feature-1 的分支,则 git 会创建之;如果存在,则将修改合并到该分支上
使用 git branch -vv
指令就可以发现,本地的 feacture-1 分支并没有与远端的 feacture-1 分支建立追踪关系。
因此我们不能直接使用 git pull、git push 等缩写指令。解决方法 git 也已经提示我们了①使用完整的命令 ②建立远端分支与本地分支的追踪关系
5. 采用方法②来解决问题
开发者B同理
此时远端已经多了两个分支:
开发者A与开发者B各自在分支上完成开发,并提交到远程分支 feacture-1
与 feacture-2
我们前面提到,合并分支也有两种方式:
pull request
,通过代码审验后合并到 master 分支这里我们就是采用 pull request 的方式合并分支
开发者A:
pull request
。可自动合并说明没有遇到冲突开发者B:
pull request
。不可自动合并说明遇到了冲突feacture-2
分支上,解决完冲突后再将 feacture-2
分支合并到 master 分支上git pull
拉取最新版本的 master 分支代码!!pull request
请求就不会遇到问题了前面提到,删除分支也有两种方式:
现在我们演示第二种删除方式
git push origin --delete xxx
。git branch -D xxx