使用Git进行多人协作开发

4,392 阅读5分钟

主要分支

每个仓库都应该至少包含两个主要分支 masterdevelop; master用于正式发布,develop用于日常开发。

master分支

  • master 为主分支,也是用于部署生产环境的分支,master 分支要确保稳定性
  • master 分支一般由 develop 以及 hotfix 分支合并,任何时间都不能直接修改代码

开发分支develop

  • develop为开发分支,始终保持最新完成以及bug修复后的代码
  • 一般开发新功能时,feature 分支都是基于 develop 分支下创建的

临时性分支

功能分支(feature)

  • 为了开发某种特定功能,从develop分支上面分出来的功能分支的名字
  • 功能分支通常仅存在于开发人员存储库中,而不存在于中origin。
  • 可以采用feature-* (分支功能/分支名)的形式命名。

预发布分支 (release)

  • 指发布正式版本之前(即合并到master分支之前),我们可能需要有一个预发布的版本进行测试。
  • 发布分支是从develop分支上面分出来的,预发布结束以后,必须合并进develop和master分支
  • 可以采用release-*的形式命名

修补bug分支 (fixbug)

  • 软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从master分支上面分出来的。修补结束以后,再合并进master和develop分支
  • 它的命名,可以采用fixbug-*的形式。

使用git进行日常开发

当我们拿到一个git地址,首先进行代码clone

// 克隆仓库代码
git clone 'xxxxx'
// 查看详情
git remote -v

实际上git自动把本地的master分支和远程的master分支对应起来了并且远程仓库的默认名称是origin

从develop建立功能分支

// 开发新功能时,请从develop分支
git checkout -b feature-* develop

在此分支上不断的完善

  • 多人协作时,大家都会往masterdev分支上推送各自的修改,所以需要同步线上代码
  • git pull origin develop意思是去获取远程仓库中develop分支上的commits,然后把origin/develop中的内容merge到你目前的分支中
// 同步develop分支代码
git pull origin develop

不断的完善功能

  • 通过git add git commit -m不断的完善这个分支的功能
// 不断的add commit 直到功能完善
git add 
git commit -m ''

功能开发完成

  • 功能开发完成以后合并到develop,合并一定是在 feature/* 完全开发完成并且测试通过的情况下进行合并操作,不能把有错误的提交上去
// 切换分支到develop
git checkout develop
// 合并分支
git merge --no--ff feature-*
// 删除分支
git branch -d feature-*

--no-ff标志使合并始终创建一个新的提交对象,即使合并可以通过快进来执行。这样可以避免丢失有关要素分支历史存在的信息,并将所有添加了要素的提交分组在一起。

平时默认的git merge无法从Git历史记录中看到哪些提交对象一起实现了功能—您将不得不手动读取所有日志消息。在此模式下还原整个功能(即一组提交)确实很头疼。

预发布分支 release

从develop分支创建发行分支。例如,说版本1.1.5是当前的生产版本,我们即将发布一个大版本,develop准备好了“下一个版本”,我们已经决定,这将成为版本1.2(而不是1.1.6或2.0)。因此,我们分支并给发行分支起一个反映新版本号的名称

#创建一个预发布分支:
git checkout -b release-x develop
#确认没有问题后,合并到master分支:
git checkout master
git merge --no-ff release-x
# 对合并生成的新节点,做一个标签
git tag -a x

为了保留在release分支中所做的更改,我们需要将这些更改重新合并到中develop

// 切换到分支'develop' 
git checkout develop
git merge --no-ff release-1.2

现在我们真的完成了,可以删除发布分支,因为我们不再需要它

git branch -d release-1.2

修补分支 hotfix-*

修补程序分支是从master分支创建的。例如,说1.2版是当前生产版本,正在运行,并且由于严重的错误而引起麻烦。但是变化develop仍然不稳定。然后,我们可能会分支出一个修补程序分支并开始解决问题

// 切换到新分支“ hotfix-1.2.1” 
git checkout -b hotfix-1.2.1 master
// 加的-a参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区
git commit -a -m “将版本号加至1.2.1” 

在修复完成以后,提交此修复程序

git commit -m “修复了严重的生产问题”

完成修补程序分支后,该bugfix需要合并回master,但也需要合并回develop,以确保该bugfix也包含在下一发行版中

  • 合并到master
// 切换到分支'master' 
$ git checkout master
// 获取修复的内容
$ git merge --no-ff hotfix-1.2.1
// 标记版本
$ git tag -a 1.2.1
  • 合并到develop
// 切换到分支'develop' 
$ git checkout开发
$ git merge --no-ff hotfix-1.2.1
  • 删除这个分支
git branch -d hotfix-1.2.1

git stash的以应用场景

  • 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交。这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
  • 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
// 将所有未提交的修改(工作区和暂存区)保存至堆栈中
git stash
// 查看当前stash中的内容
git stash list
// 恢复暂存中的代码
git stash pop

参考文献