93

I having been using git flow for a while now. I am curious to learn about a specific use case.

For one of my projects I have a ticket for a new website feature. This ticket depends on many sub-tasks. I would like to create a feature branch for the main ticket, and then for each sub-task create a feature branch off of the parent feature branch.

Let's assume I have a ticket PROJ-500 and I create a feature branch for it

git flow feature start PROJ-500

Then I want to integrate tickets PROJ-501 through PROJ-515 into PROJ-500 before integrating the whole thing into develop. Is there a way for me to do something like

git flow feature start PROJ-511 -b PROJ-500

Then over time these sub-tasks get completed and when their feature is finished, the branch is merged into PROJ-500.

git flow feature finish PROJ-511

The above command would merge PROJ-511 into PROJ-500

And once all sub-tasks are completed then PROJ-500 will be finished and merged into develop.

This way the new website feature is integrate into develop as a single unit rather than piecemeal.

EvilTeach
  • 28,120
  • 21
  • 85
  • 141
pymarco
  • 7,807
  • 4
  • 29
  • 40
  • Does this not do it? `git flow feature start PROJ-511 PROJ-500`? The link you posted in the comment to DerekS' answer suggests that it should. – Paul Hicks Dec 08 '14 at 01:57

5 Answers5

131

You can create a sub-feature branch via

git flow feature start PROJ-511 feature/PROJ-500

But you cannot use the GitFlow tool to merge the branch back into the main feature branch because if you do

git flow feature finish PROJ-511

the feature will be merged into develop. Ergo sub-features are not supported, you need to do it manually.

Alternatives: The requirement is not new, though. There is an open issue as well as a fork project claiming to support finishing features into branches other than develop. I also found a pull request with an implementation of that feature. You might want to try that modification and see if you are happy with it.


Update 2019-12-13: As user Matěj Kříž just mentioned in his comment, user Tony Chemit has written an answer here a few months after mine, pointing to gitflow-avh as an alternative to the original gitflow product. It supports sub-features out of the box with the syntax shown above. Some years have passed by and nowadays the AVH edition is part of the normal installation of Git for Windows, I just verified this on my local box and tested the sub-feature option. I.e. for Windows users it just works right after Git installation.

kriegaex
  • 63,017
  • 15
  • 111
  • 202
  • 1
    @pymarco: Thanks for accepting the answer. I am curious though: Have you tried any of the alternatives? If so, which one and what was the outcome? Does it work as expected? Maybe other readers can learn something from your experience. :-) – kriegaex Dec 09 '14 at 09:45
  • Sorry, but I have not had time to return to this. I will try at some point. – pymarco Feb 05 '15 at 18:16
  • 3
    Why the downvote? Downvotes are meant to be used for badly written, sloppy answers showing no sign of research effort or knowledge. Anyway, thanks. – kriegaex Jun 02 '15 at 20:01
  • If you use **gitflow-avh** version look lower at https://stackoverflow.com/a/29353800/472611 @tony-chemit answer – Matěj Kříž Dec 11 '19 at 15:15
38

As I understood, gitflow is quite abandoned.

gitflow-avh replaces it and offers this feature (see https://github.com/petervanderdoes/gitflow#creating-featurereleasehotfixsupport-branches).

I just try it and it works well to me.

git flow feature start PROJ-511 feature/PROJ-500
git flow feature finish PROJ-511

PROJ-511 was merged into feature/PROJ-500.

Tony Chemit
  • 1,175
  • 4
  • 14
  • 30
16

As already mentioned, we can start a new feature using any base branch with

git flow feature start PROJ-511 feature/PROJ-500

And to finish the sub feature we can temporarly change git flow configuration to use our feature branch instead of develop:

git flow config set develop feature/PROJ-500 && git flow feature finish PROJ-511

This way, git flow runs all commands and sanity checks. Finally, To restore config, we can run

git flow config set develop develop 
César
  • 1,608
  • 1
  • 18
  • 23
8

Update (November 5, 2020): As noted in the newer answer here, this is possible with gitflow-avh which has replaced the original git flow.

===================

Original Answer:

I don't think there is a method for this in git flow, but it is fairly simple with just git.

git checkout PROJ-500
git checkout -b PROJ-511
...do your PROJ-511 work...
git checkout PROJ-500
git merge PROJ-511
git branch -d PROJ-511
Derek
  • 3,438
  • 1
  • 17
  • 35
  • 2
    Thanks Derek for responding. Yes, I could follow that workflow. But git flow encapsulates a number of commands and sanity checks that I prefer to utilize for sub-feature development. For example here is a link to git-flow-feature - https://github.com/nvie/gitflow/blob/develop/git-flow-feature – pymarco Apr 10 '14 at 03:14
0

Simply you can make it from a base feature or even a branch as you like

git flow feature start new-feature-name original-feature-or-base-branch
Rachid Loukili
  • 623
  • 6
  • 15