Git-flow

Revision as of 12:19, 12 April 2020 by Rasimsen (talk | contribs)

official resource :

https://danielkummer.github.io/git-flow-cheatsheet/

What is git-flow

git-flow are a set of git extensions to provide high-level repository operations for Vincent Driessen's branching model.


This document shows the basic usage and effect of git-flow operations.

Basic tips

  • Git flow provides excellent command line help and output. Read it carefully to see what's happening...
  • The macOS/Windows Client Sourcetree is an excellent git gui and provides git-flow support
  • Git-flow is a merge based solution. It doesn't rebase feature branches.

Installation

You need a working git installation as prerequisite. git

Git flow works on macOS, Linux and Windows

macOS

Homebrew

$ brew install git-flow-avh

Macports

$ port install git-flow-avh

Linux

$ apt-get install git-flow


Windows (Cygwin)

$ wget -q -O - --no-check-certificate https://raw.github.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-installer.sh install stable | bash

You need wget and util-linux to install git-flow.

Hello World with git-flow

Git flow needs to be initialized in order to customize your project setup.

Create new git repo

$ mkdir git-flow-helloworld
$ cd git-flow-helloworld

$ echo "# git-flow helloworld" >> README.md
$ git init
$ git add README.md
$ git commit -m "git-flow first commit"
$ git remote add origin https://github.com/[git account username]/git-flow-helloworld.git
$ git push -u origin master

Initialize git-flow

Start using git-flow by initializing it inside an existing git repository:

$ git flow init

You'll have to answer a few questions regarding the naming conventions for your branches. It's recommended to use the default values.

$ git flow init

Which branch should be used for bringing forth production releases?
   - master
Branch name for production releases: [master] 
Branch name for "next release" development: [develop] develop

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Bugfix branches? [bugfix/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? [] 
Hooks and filters directory? [/workspace/git-flow-helloworld/.git/hooks]

Features

  • Develop new features for upcoming releases
  • Typically exist in developers repos only

Start a new feature

Development of new features starting from the 'develop' branch.

Start developing a new feature with

$ git flow feature start MYFEATURE

This action creates a new feature branch based on 'develop' and switches to it

as an example

$ git flow feature start my-first-gitflow
Switched to a new branch 'feature/my-first-gitflow'

Summary of actions:
- A new branch 'feature/my-first-gitflow' was created, based on 'develop'
- You are now on branch 'feature/my-first-gitflow'

Now, start committing on your feature. When done, use:

     git flow feature finish my-first-gitflow

(base) Rasims-MacBook-Pro:git-flow-helloworld $ git branch
  develop
* feature/my-first-gitflow
  master

Finish up a feature

Finish the development of a feature. This action performs the following

  • Merges MYFEATURE into 'develop'
  • Removes the feature branch
  • Switches back to 'develop' branch
$ git flow feature finish MYFEATURE


as an example for our hello-world repo

# make some changes on the feature branch and push
$ git add .
$ git commit -m 'commıt feature branch changes'
$ git push

# git flow finish
$ git flow feature finish my-first-gitflow

Switched to branch 'develop'
Updating 5a49e29..cd4345e
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)
To https://github.com/xxxx/git-flow-helloworld.git
 - [deleted]         feature/my-first-gitflow
Deleted branch feature/my-first-gitflow (was cd4345e).

Summary of actions:
- The feature branch 'feature/my-first-gitflow' was merged into 'develop'
- Feature branch 'feature/my-first-gitflow' has been locally deleted; it has been remotely deleted from 'origin'
- You are now on branch 'develop'

we merged our feature branch changes with develop branch, but our job is not finished yet.

Publish a feature

Are you developing a feature in collaboration?

Publish a feature to the remote server so it can be used by other users.

$ git flow feature publish MYFEATURE

as an example

$ git flow feature publish my-first-gitflow

Getting a published feature

Get a feature published by another user.

$ git flow feature pull origin MYFEATURE

as an example

$ git flow feature pull origin my-first-gitflow

You can track a feature on origin by using

$ git flow feature track MYFEATURE

as an example

$ git flow feature track my-first-gitflow

Release

Support preparation of a new production release

Allow for minor bug fixes and preparing meta-data for a release

Start a release

To start a release, use the git flow release command. It creates a release branch created from the 'develop' branch.

$ git flow release start RELEASE [BASE]

You can optionally supply a [BASE] commit sha-1 hash to start the release from. The commit must be on the 'develop' branch.

It's wise to publish the release branch after creating it to allow release commits by other developers. Do it similar to feature publishing with the command:

$ git flow release publish RELEASE

(You can track a remote release with the

git flow release track RELEASE

command)

Finish up a release

Finishing a release is one of the big steps in git branching. It performs several actions:

  • Merges the release branch back into 'master'
  • Tags the release with its name
  • Back-merges the release into 'develop'
  • Removes the release branch
$ git flow release finish RELEASE

Don't forget to push your tags with

git push origin --tags