Top Banner
Git flow & Git
24

Git and git flow

Jan 11, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • Git flow & Git

  • Init a project with existing files

    git flow init

    Creates two branches:master (production release)develop (next release)

    Supported branches prefixes:featurereleasehotfix

  • After finishing "my-hotfix", master and develop have the commits made in the hotfix branch

    Hotfixes workflow

    Command master my-hotfix develop

    git flow hotfix start my-hotfix

    working in hotfix

    git commit -am "msg"

    git flow hotfix finish my-hotfix

  • git flow hotfix start my-hotfix

    is equivalent to the next git commands

    git checkout mastergit branch hotfix/my-hotfixgit checkout hotfix/my-hotfix

    or

    git checkout -b hotfix/my-hotfix master

    Starting a hotfix

  • git flow hotfix finish my-hotfix

    is equivalent to the next git commandsgit checkout mastergit merge --no-ff hotfix/my-hotfixgit checkout developgit merge --no-ff hotfix/my-hotfixgit branch -d hotfix/my-hotfix

    don't forget to push master and develop into origingit push origin [master|develop]

    Finishing a hotfix

  • After finishing "my-feature", only develop has the commits made in the feature branch

    Features workflow

    Command master my-feature develop

    git flow feature start my-feature

    working in feature

    git commit -am "msg"

    git flow feature finish my-feature

  • git flow feature start my-feature

    is equivalent to the next git commands

    git checkout developgit branch feature/my-featuregit checkout feature/my-feature

    or

    git checkout -b feature/my-feature develop

    Starting a feature

  • git flow feature finish my-feature

    is equivalent to the next git commands

    git checkout developgit merge --no-ff feature/my-featuregit branch -d feature/my-feature

    don't forget to push develop into origingit push origin develop

    Finishing a feature

  • After finishing "v2.0", master and develop have the commits made in the release branch

    Releases workflow

    Command master v2.0 develop

    git flow release start v2.0

    working in release

    git commit -am "msg"

    git flow feature finish v2.0

  • git flow release start my-release

    is equivalent to the next git commands

    git checkout developgit branch release/my-releasegit checkout release/my-release

    or

    git checkout -b release/my-release develop

    Starting a release

  • git flow release finish my-release

    is equivalent to the next git commandsgit checkout mastergit merge --no-ff release/my-releasegit tag -a my-releasegit checkout developgit merge --no-ff release/my-releasegit branch -d release/my-release

    don't forget to push master and develop into origingit push origin [master|develop]

    Finishing a release

  • Hotfixesgit checkout mastergit pullgit checkout hotfix-branch git merge master

    Featuresgit checkout developgit pullgit checkout feature-branchgit merge develop

    What if my branch gets obsolete?

  • git flow [hotfix|feature|release] publish my-branch

    you can checkout remote branches like this

    git checkout -b my-branch origin/my-branch

    don't forget to remove them when they are not needed anymore

    git push origin :my-branch

    Publishing remote branches

  • Suitable to support old versions of the software but in a very EXPERIMENTAL status and NOT RECOMENDABLE for production environments

    git flow support start v1.1.1 v1.0

    Support branches

  • Useful git commands

  • Log of the last 2 commitsgit log -2

    Differences in the last 2 commitsgit log -2 -p

    Differences between commitsgit diff 77cf297..eb0df61gif diff --name-only 77cf297..eb0df61fgit diff HEAD..HEAD^1 filename

    Showing the last commits

  • Useful when we need to checkout another branch and we don't still want to commit anything

    git stashgit stash listgit stash popgit stash apply stash@{0}git stash show stash@{1}git stash drop stash@{0}

    Saving work without committing

  • If the file hasn't been added to the indexgit checkout one.txt

    If the file has already been added to the indexgit reset HEAD one.txt

    If we want to undo a commit but keeping the modificationsgit reset --soft sha1_commit

    If we want to undo a commit completelygit reset --hard sha1_commit

    Throwing changes away

  • Fixing mistakes with git

  • Committing too early

    git commit -m "my message"

    I forgot to add the file one.txt and I don't want to do another commit

    git add one.txtgit commit --amend

  • Committing too early again

    git add two.txt three.txtgit commit -m "my message"

    I don't want the file three.txt in this commit

    git reset HEAD^1 three.txtgit commit --amend

  • Fixing mistakes in previous commits

    An error in the file four.txt was introduced in a previous commit

    git checkout vim four.txtgit add four.txtgit commit --amendgit rebase --onto HEAD

  • Recovering local deleted branch

    git branch -D my-feature

    Looking for the last commit in the deleted branch and getting its SHA1 with git reflog

    git branch my-feature

  • Links

    http://git-scm.com/documentation

    http://nvie.com/posts/a-successful-git-branching-model/