---
layout: post
title: "Release Development with Git Flow"
description: "Release Development with Git Flow"
category: Development
tags: [Git, Deployment]
---
{% include JB/setup %}
For complete description of release workflows controlled with git-flow see:
* [git-flow](https://github.com/nvie/gitflow)
* [Jeff Kreeftmeijer's introduction](http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/)
## How-To
A simple How-To of using git-flow on a bash shell.
Let's assume a new release in Version 1.0.1 as an example:
RELEASE="v1.0.1"
### Initialize git flow
how to initialize git-flow if you haven't jet.
git flow init # =>
Which branch should be used for bringing forth production releases?
- development
- master
Branch name for production releases: [master] master
Which branch should be used for integration of the "next release"?
- development
Branch name for "next release" development: [master] development
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
### Start a release branch
git flow release start $RELEASE # start new branch
git flow release publish $RELEASE # publish release branch to online repository
### Participate in a release branch
If you want to add changes to a release branch you didn't create. Switching to a new release branch.
git fetch; git pull; git checkout release/$RELEASE
### Finish a Release
How to finish the release, adding a tag and delete the online release branch.
git flow release finish $RELEASE # finish release
git push
git push --tags #push the new tag to remote
git push origin :release/$RELEASE #delete remote branch
## Tools and Helpers
###Reset a tag
if something went wrong and you have to reset a tag.
git tag -d $RELEASE # delete the wrong tag
git push origin :refs/tags/$RELEASE # remove the remote tag
git tag $RELEASE # recreate the tag
git push --tags # push tag to remote
###Helper to complete the ChangeLog
suppose you want to know what was done in the development branch since the last release date (e.G.: 2012/03/13). This git command give you each commits in a line. Add --no-merges to remove merge commits.
git log --since=2012-03-13 --date=local --pretty="%ad %an: %s" development