anchor.diff:          // TODO: could check the branch is correctly based off develop
           _log.info('${_project.name} already on correct feature branch');
         } else {
  -        return gitCheckout(
  -            await _project.gitDir, '$featureBranchPrefix$featureName');
  +        return gitCheckout(_gitDir, '$featureBranchPrefix$featureName');
         }
       } else {
  -      return gitFlowFeatureStart(await _project.gitDir, featureName);
  +      return gitFlowFeatureStart(_gitDir, featureName);
       }
     }
   
     Future featureFinish(String featureName,
         {bool excludeOnlyCommitIf(Commit commit): _dontExclude}) async {
  -    final GitDir gitDir = await _project.gitDir;
  +    final GitDir gitDir = _gitDir;
       final Map<String, Commit> commits =
           await gitDir.getCommits('$developBranchName..HEAD');
       _log.info('found ${commits.length} commits on feature branch');
  
positive.code: 
    @override
    Future<Iterable<Version>> getReleaseVersionTags() async {
      final gitDir = await _project.gitDir;
      return await gitFetchVersionTags(gitDir);
    }
  
    @override
    Future assertNoActiveReleases() async {
      final releaseNames = await gitFlowReleaseNames(await _project.gitDir);
      if (releaseNames.isNotEmpty) {
        throw new StateError(
            '${_project.name} has an existing release branch. Must finish all active releases first');
  
negative.code:           .getOrElse(() => false);
  }
  
  class _GitFeatureCommandsSingleProjectFlowImpl implements GitFeatureCommands {
    final JefeProject _project;
    final GitDir _gitDir;
  
    _GitFeatureCommandsSingleProjectFlowImpl(this._project, this._gitDir);
  
    Future init() => executeTask('git flow init', () async {
          await initGitFlow(_gitDir);
        });
  
    Future featureStart(String featureName, {bool throwIfExists: false}) async {
  