场景三:团队项目中的分叉合并

1、团队项目的一个参考工作流程

有了前面的基础知识和技能之后,我们可以了解更复杂的团队项目合作的工作流程。如果多人同时向远程分支频繁提交代码,一来可能会有诸多冲突的情况发生;二来整个git log提交记录中多个开发者或多个功能模块。代码模块的提交是交错排列在同一条时间线上的,不利于回顾查看和回退代码,并且会让跟踪代码的成长轨迹变得异常困难。

我们需要考虑新的方式来独立维护不同开发者或者不同功能模块、代码模块的代码,让一段连续的工作在提交日志的时间线上呈现为一条独立的分支线段,只在关键节点处进行分支合并。

基于以上想法,建议团队项目的每一个开发者采用的工作流程大致如下。

(1)克隆或同步最新的代码到本地存储库。

(2)为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制。

(3)在该分支上完成某单一功能模块或代码模块的开发工作。

(4)最后,将该分支合并到主分支,再和远程存储库同步。

注意:默认的合并方式为“快速式合并”(fast-forward merge),会将分支里的提交合并到主分支里,并列在一条时间线上,与我们期望的呈现为一条独立的分支线段不符,因此合并时需要使用--no-ff参数关闭“快进式合并”。

2、分支的基本用法

使用如下的Git命令创建分支。

git checkout -b mybranch

将当前分支分叉出一个分支(以上命令中分支名称为mybranch),并签出到工作区。这时使用git branch查看分支列表,如下图所示,mybranch前面有一个*代表当前工作区处于mybranch分支。

这时要将当前工作区切换到master分支,使用git checkout master命令即可。

场景三:团队项目中的分叉合并_第1张图片

假如要将mybranch分支合并到master分支,那么首先确保当前工作区处于master分支。可以使用git checkout master命令切换到master分支,也可以使用git branch查看确认。使用以下git命令合并mybranch分支到当前的master分支。

git merge mybranch

这样就可以将mybranch分支合并到master分支。如果创建mybranch分支之后master分支更新过,合并可能会因为有冲突而失败,这时mybranch分支的代码已经合并到当前工作区,只要在当前工作区里先解决冲突,然后提交到仓库(使用git add 和 git commit -m)即可完成合并。

默认的合并方式是“快进式合并”,合并前后示意图如下所示,也就是mybranch分支与master分支会合并到一条时间线中。

场景三:团队项目中的分叉合并_第2张图片

 如果要保留mybranch分支为一段独立的分支线段,则需要使用--no-ff参数关闭“快进式合并”,Git命令如下:

git merge --no-ff mybranch

使用--no-ff参数后,会进行正常合并,在master分支上生成一个新节点。关闭“快进式合并”的合并示意图如下所示。

场景三:团队项目中的分叉合并_第3张图片

 为了保证版本演进路径清晰,我们可采用这种关闭“快进式合并”的合并方法。

由于git用的文本编辑器是nano,要是会用vim的话可以换成vim,我们可以使用下面的指令将编辑器换成vim。

git config --global core.editor "vim"

3、团队项目工作流程参考

我们建议团队的每一个开发者都采用的基本工作流程有以下四大步。

(1)克隆或同步最新的代码到本地存储库

git clone https://DOMAIN_NAME/YOUR_NAME/REPO_NAME.git
git pull

ps:此处建议每次工作前都与远程存储库做一个同步

(2)为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制。

git checkout -b mybranch
git branch

(3)在该分支上完成某单一功能模块或代码模块的开发工作。多次执行以下命令。

git add FILES
git commit -m "commit log"

(4)最后,先切换回master分支,将最新的远程origin/master分支同步到本地存储库,再合并mybranch分支到master分支,推送到远程origin/master分支之后即完成了一项开发工作。

git checkout master
git pull
git merge --no-ff mybranch
git push

这样在GitHub上的分支网络图中,该工作将有一段明确的分叉合并路径。如果整个团队的每一项工作都参照这个工作流程进行,那么最终GitHub上的分支网络图中就会留下清晰的项目演进成长路径,如下图所示,有两次合并到master分支。

场景三:团队项目中的分叉合并_第4张图片

你可能感兴趣的:(Git,git,github)