git and git flow
Embed Size (px)
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 <SHA1_commit>vim four.txtgit add four.txtgit commit --amendgit rebase --onto HEAD <SHA1_commit> <branch>

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 <sha1_last_commit>

Links
● http://git-scm.com/documentation
● http://nvie.com/posts/a-successful-git-branching-model/