Git 多人协作
目录
情景一
情景二
合并分支
情景一
目标:远程 master 分支下的 file.txt 文件新增代码 "aaa","bbb"。
实现:由开发者1新增 "aaa" ,开发者2新增 'bbb''。
条件:在一个分支下合作完成。
针对以上情景我们要注意的是,虽然实在 master 分支下对应文件中新增代码,但是在实际开发中,我们是不建议在 master 分支中进行代码的添加的,因为 master 分支中我们主要保存的是经过测试之后比较完善且稳定的代码,直接在 master 分支中新增代码,就有可能导致之前稳定的代码出现 bug。所以我们首先要创建一个 dev 分支,在 dev 分支中新增代码之后,最终合并到master 分支中。
1.在远程创建一个 dev 分支。
2.在本地 linux 服务器中,也创建一个 dev 分支,然后将远程的 dev 分支拉取到本地,并且创建本地 dev 分支和远程 dev 分支的联系。linux服务器代表第一个开发者。
为什么要添加本地 dev 分支和远程 dev 分支的联系呢?
因为我们的推送和拉取其实就是对远程分支和本地分支的管理。所以如果我们在使用 git push 和 git pull 指令在进行拉取和推送时,没有添加远程分支和本地分支相关的信息,就必须先对远程分支和本地分支建立连接。
使用 git branch -a 指令查看本地仓库中和拉取的远程的 dev 分支。
我们已经成功创建了 dev 分支并且已经成功的拉取了远程的 dev 分支。
使用 git branch -vv 指令可以查看本地仓库分支和远程仓库分支是否建立了连接。
我们发现,只有本地的 master 分支和远程的 master 分支建立了连接,但是本地的 dev 分支并没有和远程的 dev 分支建立连接。
因为我们是在本地创建了 dev 分支之后再与远程的 dev 分支进行连接的。
所以我们必须先切换到 dev 分支然后再与远程 dev 分支建立连接。
使用 git branch -u origin/[分支名称] 建立连接。
此时,本地 dev 分支已经和远程的 dev 分支建立了联系。
当然,我们可以在创建分支的时候,使用 git checkout -b [本地分支名称] origin/[远程分支名称] 的指令建立本地分支和远程分支的联系。
3.在本地的 dev 分支中对 file.txt 文件新增 "aaa",并将修改后的 file.txt 文件推送到远程的 dev 分支中。
通过上图我们发现,远程的 dev 分支中已经有了本地服务器1中新增的 "aaa" 。
4.在本地 windows 服务器上克隆远程仓库到本地,然后再本地 windows 服务器上创建 dev 分支。 windows 服务器代表第二个开发者。
在本地仓库中创建 dev 分支时,我们直接与远程的 dev 分支建立了连接。
5.给 dev 分支中添加 "bbb" ,然后 push 到远程。
在本地分支 dev 中新增的 "bbb" 已经被上传到了远程的 dev 分支中。
6. 将远程 dev 分支中的内容 pull 到本地 dev 分支中。此时的本地服务器是我们的 linux 服务器,当然也可以是 windows 服务器。
其实我们可以直接在远程的 Pull Request 中进行分支的合并,但是这需要审核人员进行审核,这也是我们在项目开发中常用的合并分支的方法,目标分支合并了源分支,审核人员通常为开发组长或者项目经理。
但是为了熟练之前的操作,我们选择在本地进行了分支合并之后,再将合并之后 master 分支中的内容提交到远程的 master 分支中。
通过上图可以看出,我们已经将远程仓库 dev 分支中的 file.txt 文件的内容拉取到了本地仓库 dev 分支中并与本地的 file.txt 进行了合并。
7.让本地仓库中的 dev 分支合并 master 分支。
有的小伙伴就有点疑惑了,不应该是 master 分支合并 dev 分支吗?
其实这是因为,有可能在本地创建了 dev 分支之后,本地仓库的 master 分支又 pull 了远程仓库 master 分支中的内容,所以本地的仓库的 master 分支就进行了新的提交,所以此时如果将master 分支合并 dev 分支,就有可能会导致合并冲突,如果在 master 分支中解决冲突,就有可能导致一些新的问题,所以我们要先让本地 dev 分支和并 master 分支并解决冲突,最终再让 master 分支合并 dev 分支,此时就不会再产生冲突。
通过上图,我们发现 dev 分支已经合并了 master 分支。
通过上图我们发现,master 分支已经合并了 dev 分支。
8.将本地的 master 分支中的内容 push 到远程的 master 分支中。
此时我们就已经完成了情景一的所有内容。
一般情况下,两个开发人员并不会在同一个分支中进行开发,而是会在多个分支中进行开发,因为在一个分支中进行开发一定会造成冲突。所以便引入了多人协作的下一情景。
情景二
目标:远程 master 分支下新增 function1 和 function2 文件。
实现:由开发者1新增 function1,由开发者2新增 function2。
条件:在不同分支下协作完成,各自让某一个功能私有某一个分支。
云服务器我们为开发者1,windows 服务器我们为开发者2。
1.云服务器创建 feature1 分支,在该分支上创建 function1 文件,并提交到远程仓库的 feature1 分支中。
此时在远程仓库中我们也已经看到了 function1 这个文件。
当我们远程没有创建对应的分支时,在本地 push 对应的分支时,会自动在远程仓库中创建对应的分支并进行上传。
2.在 windows 服务器上创建 feature2 分支,并在 feature2 分支中创建 function2 文件,并推送到远程仓库的 feature2 分支中。
在远程仓库中我们也发现了提交的 function2 文件。
如果开发者2有一天突然生病了,那么此时开发者2将它的工作交给了开发者1来完成,那么此时开发者1该怎样完成呢?
1.云服务器中显拉取远程仓库的 feature2 分支。
使用 git pull 拉取远程分支到本地。
2.在云服务器中创建本地 feature2 分支,并建立与远程 feature2 分支的连接。
3.修改 function.txt 文件中的内容,并进行提交推送到远程仓库中。
如上图,在远程分支中也成功观察到了文件内容的修改。
但是此时在开发者2的 feature2 分支中仍然是看不到修改的内容的。
所以我们需要将远程 feature2 分支中的内容拉取到开发者2 的 feature 下。
使用 git pull 指令进行拉取。
此时在开发者2的 feature2 分支中,也可以看到修改之后的内容。
合并分支
我们已经在 feature1 和 feature2 分支中创建了对应的文件,并且已经提交到了远程仓库,此时我们需要的就是,将远程仓库中的分支进行合并。
1.在远程合并 feature2 分支和 master 分支。
直接使用 PR 进行合并。
最终在 mater 分支下就有了在 feature2 分支中创建的 function2.txt 文件。
2.在远程合并 master 分支和 feature1 分支。
这是一上述在远程合并 master 分支和 feature2 分支种比较常见的合并方法。但是为了安全起见,我们还是建议在合并分支时,先让 feature1 分支合并 master 分支,有冲突解决冲突,解决冲突完成之后再让 master 分支和并 feature1 分支,这样就会降低合并冲突时的风险。
先让 master 分支 pull 远程 master 分支中的内容,使得 master 分支中的内容最新。
然后将合并后的 feature1 分支推送到远程 feature1 分支中。
最后使用 PR 申请合并 master 分支和 feature1 分支。
最终成功将 feature1 合并进了 master 分支中,成功看到了在 feature1 分支中创建的 function1 文件。
合并分之后,删除多余的分支。
最终只剩下了 master 分支。
虽然在远程删除掉了分支,但是在本地中仍然可以看到。
使用 git remote show [仓库名称] 可以查看到远程分支与本地分支的关系,并且可以看到远程哪些分支已经删除。
使用 git remote prune [分支名称] 删除已经不存在的分支。
如上图在远程仓库中删除的分支在本地也看不到了,记得还要删除本地已经被合并的分支。。
以上便是在使用 git 进行多人合作时常见的两个情景,情景二应用最广泛。
以上便是本期的所有内容。
本期内容到此结束^_^