引用自:https://blog.csdn.net/j3T9Z7H/article/details/85271926git
最近在着手制定开发规范,想要把项目正规高效的跑起来。计划引入 Git 版本控制,Git-Flow 便成为了首选。由于以前并无过多接触,因此先花些时间摸索一下。app
当在团队开发中使用版本控制系统时,商定一个统一的工做流程是相当重要的。 不可避免的。ide
的确能够在各个方面作不少事情,然而,若是在你的团队中尚未能造成一个特定有效的工做流程,那么混乱就将是基本套路:你能够定义一个彻底适合你本身项目的工做流程,或者使用一个别人定义好的。测试
咱们使用 fetch
来安装 :brew install git-flow
this
以后,经过 spa
来初始化项目:git flow init
.net
这时候就会有一些配置的操做,先默认操做:版本控制
Initialized empty Git repository in /Users/jartto/Documents/git-flow-demo/.git/
code
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'jartto@bogon.(none)')
fatal: Not a valid object name: 'master'.
error: pathspec 'develop' did not match any file(s) known to git.
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
须要强调一点:git-flow 只是封装了 git 的命令。
因此在咱们初始化的时候,对仓库并无其余改动,只是建立了几个分支。固然,若是你不想继续使用
,那么只须要简单的停用 的命令便可,不须要修改或者删除任何文件。为了验证一下,咱们看下目前的分支,执行:
git branch
输出:
* develop
master
很简单,
分支是咱们平常开发的分支,会有不少改动。而 主要针对线上分支,下面会细说。这里补充一点,咱们能够经过 help 命令来查看用例。
git flow help
输出以下:
usage: git flow <subcommand>
Available subcommands are:
init Initialize a new git repo with support for the branching model.
feature Manage your feature branches.
release Manage your release branches.
hotfix Manage your hotfix branches.
support Manage your support branches.
version Shows version information.
Try 'git flow <subcommand> help' for details.
若是我要看
相关命令呢?git flow feature help
使用规范就会列出来:
usage: git flow feature [list] [-v]
git flow feature start [-F] <name> [<base>]
git flow feature finish [-rFk] <name|nameprefix>
git flow feature publish <name>
git flow feature track <name>
git flow feature diff [<name|nameprefix>]
git flow feature rebase [-i] [<name|nameprefix>]
git flow feature checkout [<name|nameprefix>]
git flow feature pull <remote> [<name>]
模式会预设两个主分支在仓库中: 1. 只能用来包含产品代码 咱们不能直接工做在这个 分支上,而是在其余指定的,独立的特性分支中。
不直接提交改动到 master 分支上也是不少工做流程的一个共同的规则。
2.
是你进行任何新的开发的基础分支 当你开始一个新的功能分支时,它将是开发的基础。另外,该分支也聚集全部已经完成的功能,并等待被整合到 分支中。上面说到的这两个分支被称做为长期分支,它们会存活在项目的整个生命周期中。
而其余的分支,例如针对功能的分支,针对发行的分支,仅仅只是临时存在的。它们是根据须要来建立的,当它们完成了本身的任务以后就会被删除掉。
1.
分支 最为稳定功能比较完整的随时可发布的代码,即代码开发完成,通过测试,没有明显的 ,才能合并到 中。请注意永远不要在 分支上直接开发和提交代码,以确保 上的代码一直可用;2.
分支 用做平时开发的主分支,并一直存在,永远是功能最新最全的分支,包含全部要发布 到下一个 的代码,主要用于合并其余分支,好比 分支; 若是修改代码,新建 分支修改完再合并到 分支。全部的 、 分支都是从 分支上拉的。3.
分支 这个分支主要是用来开发新的功能,一旦开发完成,经过测试没问题,咱们合并回 分支进入下一个 。4.
分支 用于发布准备的专门分支。当开发进行到必定程度,或者说快到了既定的发布日,能够发布时,创建一个 分支并指定版本号(能够在 的时候添加)。开发人员能够对 分支上的代码进行集中测试和修改 。(这个测试,测试新功能与已有的功能是否有冲突,兼容性)所有完成通过测试没有问题后,将 分支上的代码合并到 分支和 分支。5.
分支 用于修复线上代码的 。从 分支上拉。完成 后,打上 咱们合并回 和 分支。须要注意:
全部开发分支从 分支拉。
全部 分支从 拉。
全部在 上的提交都必要要有 ,方便回滚。
只要有合并到 分支的操做,都须要和 分支合并下,保证同步。
和 分支是主要分支,主要分支每种类型只能有一个,派生分支每一个类型能够同时存在多个。
在
中,经过使用 分支,使得咱们在同一时间开发多个分支更加简单。 咱们接到了一个 需求,使用 来启动:git flow feature start test1
当咱们开始一个新的
开发后:Switched to a new branch 'feature/test1'
Summary of actions:
- A new branch 'feature/test1' was created, based on 'develop'
- You are now on branch 'feature/test1'
Now, start committing on your feature. When done, use:
git flow feature finish test1
咱们自动切到了
分支下,正好开始咱们的开发,建一个文件先:vi main.js
写入
接着提交咱们的变动:git add .
git commit -m 'feat: add console.log'
好了,如今咱们开发完了,结束 feature 开发:
git flow feature finish test1
控制台输出了:
Switched to branch 'develop'
Updating d975789..27e920c
Fast-forward
main.js | 1 +
1 file changed, 1 insertion(+)
create mode 100644 main.js
Deleted branch feature/test1 (was 27e920c).
Summary of actions:
- The feature branch 'feature/test1' was merged into 'develop'
- Feature branch 'feature/test1' has been removed
- You are now on branch 'develop'
这里作了几件事情: 1.将
分支合并到了 分支; 2.删除了 ; 3.切换到 分支;须要注意:
使用的命令是:git merge —no-ff feature/test1
这样,在咱们移除
分支以前,是不会丢失任何历史记录的。若是你还不了解
相关知识,能够先看看:Git merge 的 –ff 和 –no-ff。接着,咱们看一下变动记录:
git log --oneline
输出:
27e920c (HEAD -> develop) feat: add console.log
d975789 (master) Initial commit
当咱们开发完毕,须要去发布新版本的时候,咱们可使用:
git flow release start 0.1.0
控制台会有一些提示:
Switched to a new branch 'release/0.1.0'
Summary of actions:
- A new branch 'release/0.1.0' was created, based on 'develop'
- You are now on branch 'release/0.1.0'
Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:
git flow release finish '0.1.0'
很清晰,咱们简单说一下: 1.基于
分支新建了 分支; 2.切换至 分支;又出现了新问题: 1.这是什么意思:
2. 又是什么意思?那接下来咱们要作什么呢?不着急,按照提示一步步来。
咱们修改了代码,进行add,和 commit 以后,执行:
git flow release finish 0.1.0
这个过程当中间可能出现异常:
fatal: no tag message?
Tagging failed. Please run finish again to retry.
输出:
Switched to branch 'develop'
Merge made by the 'recursive' strategy.
test.js | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.js
Deleted branch release/0.1.0 (was 0426707).
Summary of actions:
- Latest objects have been fetched from 'origin'
- Release branch has been merged into 'master'
- The release was tagged '0.1.0'
- Release branch has been back-merged into 'develop'
- Release branch 'release/0.1.0' has been deleted
这里主要有几个操做: 1.首先,
会拉取远程仓库,以确保目前是最新的版本。 2.而后, 的内容会被合并到 和 两个分支中去,这样不只产品代码为最新的版本,并且新的功能分支也将基于最新代码。 3.为便于识别和作历史参考, 提交会被标记上这个 的 。 4.清理操做,版本分支会被删除,而且回到 。若是线上代码有问题,这时候你须要紧急修复呢?
咱们可使用
:git flow hotfix start jartto
看一下执行了什么:
Switched to a new branch 'hotfix/jartto'
Summary of actions:
- A new branch 'hotfix/jartto' was created, based on 'master'
- You are now on branch 'hotfix/jartto'
Follow-up actions:
- Bump the version number now!
- Start committing your hot fixes
- When done, run:
git flow hotfix finish 'jartto'
接着咱们新建了目录:
mkdir assets
放入一张图片,修改完毕,提交并结束
:git add .
git commit -m 'fix: assets img'
git flow hotfix finish 'jartto'
看一下
有哪些操做:Switched to branch 'master'
Merge made by the 'recursive' strategy.
assets/git-flow.png | Bin 0 -> 25839 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/git-flow.png
Switched to branch 'develop'
Merge made by the 'recursive' strategy.
assets/git-flow.png | Bin 0 -> 25839 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 assets/git-flow.png
Deleted branch hotfix/jartto (was a734849).
Summary of actions:
- Latest objects have been fetched from 'origin'
- Hotfix branch has been merged into 'master'
- The hotfix was tagged 'jartto'
- Hotfix branch has been back-merged into 'develop'
- Hotfix branch 'hotfix/jartto' has been deleted
查看一下目前的
状况:git tag
正是咱们上面添加的两个标签:
0.1.0
jartto
总结一下: 1.完成的改动会被合并到
中,一样也会合并到 分支中,这样就能够确保这个错误不会再次出如今下一个 中。 2.这个 程序将被标记起来以便于参考。 3.这个 分支将被删除,而后切换到 分支上去。恭喜你,到这里你已经完成了
清清楚楚,是否是和咱们上面的过程如出一辙。
https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow
https://jeffkreeftmeijer.com/git-flow/
https://blog.csdn.net/aaaaaaliang/article/details/79451598
https://www.oschina.net/translate/a-successful-git-branching-model?print