Git Feature Branch Workflow

Zion项目我们采用Feature Branch Workflow,即每个特性在branch中开发,master始终保持稳定。特性开发完成,需提交pull request,接受其他成员的code review,同时可以在PR中围绕该特性进行讨论,PR记录了开发过程的细节。

由于是内部项目,我们没有使用fork机制,代码都维护在Github上的一个仓库:apusic/zion。在看具体的流程前,先有一个全局视图:

git

# 基本工作流程

  • 从远程clone respository
1
git clone https://github.com/apusic/zion.git
  • 创建特性分支

首先让本地的master处于最新状态:

1
2
3
git fetch
git checkout master
git rebase origin/master

创建分支

1
git checkout -b myfeature
  • 在分支上进行开发
1
2
3
git status # View the state of the repo
git add # Stage a file
git commit # Commit a file

进行一个功能特性开发时,可以多次提交到本地仓库Repository,不必每次commit都push到远程仓库Remote

  • 开发过程中,保持分支和最新代码同步
1
2
3
# While on your myfeature branch.
git fetch
git rebase origin/master

关于rebase的详细说明,请参考 The “Git Branching - Rebasing” chapter from the Pro Git book.

后面会单独介绍rebase冲突的处理。

  • 将分支发布到中心仓库

所有改动都提交后,执行:

1
git push -f origin myfeature
  • 创建pull request

访问项目主页,点击Compare & pull request创建pull request

  • code review & discussions

可以要求一个或两个项目成员进行review,也可以围绕该特性进行讨论。

  • Merge pull requests

根据项目的配置,pull requests在merge进master之前要满足一些条件,例如至少两个成员review,通过集成测试等。

所有的检查都通过后,这个pull request就可以merge了。详细的操作参见 Merging a pull request

这里有三个merge选型:Merge pull requestSquash and mergeRebase and merge,关于它们的区别请参考GitHub的帮助。 一般建议选择Squash and merge

至此,一个特性就开发完成了。

  • 删除分支

已经完成merged的 pull requests 关联的分支可以在GitHub删除,详细的操作步骤参见GitHub文档 Deleting and restoring branches in a pull request

# 冲突处理

上面的流程中,在保持分支和最新代码同步时,最有可能产生冲突。

rebase提示冲突,会列出冲突文件,执行下列步骤:

  • 手工解决冲突
  • git add <some-file> 将发生冲突的文件放回index
  • git rebase --continue 继续进行rebase
  • 提示rebase成功

Merge pull requests过程中也可能产生冲突,可以在GitHub的界面上解决冲突,详细的操作轻参考Addressing merge conflicts

如果冲突较多,建议先在客户端执行rebase,按照上面的步骤解决完冲突,再进行Merge pull requests

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus