def branch(branch_name, opts = {})
      if branch_name
        if opts[:delete]
          return delete_branch(branch_name, opts[:force])
        elsif opts[:rename]
          return rename_branch(branch_name, opts[:rename])
        elsif opts[:upstream]
          return set_upstream_branch(branch_name, opts[:upstream])
        else
          base_branch = opts[:base_branch] || 'master'
          if opts[:force]
            return change_branch(branch_name, base_branch)
          else
            return create_branch(branch_name, base_branch)
          end
        end
      else
        #list_branches(opts)
        return list_branches(opts[:all], opts[:remote], opts[:no_color])
      end
    end
def branch(branch_name, opts = {})
      if branch_name
        if opts[:delete]
          return delete_branch(branch_name, opts[:force])
        elsif opts[:rename]
          return rename_branch(branch_name, opts[:rename])
        elsif opts[:upstream]
          return set_upstream_branch(branch_name, opts[:upstream])
        else
          base_branch = opts[:base_branch] || 'master'
          if opts[:force]
            return change_branch(branch_name, base_branch)
          else
            return create_branch(branch_name, base_branch)
          end
        end
      else
        #list_branches(opts)
        return list_branches(opts[:all], opts[:remote], opts[:no_color])
      end
    end
Does branch manipulation.

 @param [String] branch_name the name of the branch

 @option opts [Boolean] :delete delete the remote branch
 @option opts [Boolean] :force force the update
 @option opts [Boolean] :all list all branches, local and remote
 @option opts [Boolean] :no_color force not using any ANSI color codes
 @option opts [String]  :rename the new name for the branch
 @option opts [String]  :upstream the new branch to track
 @option opts [String]  :base_branch ('master') the branch to base the new branch off of

 @return [String] the output of running the git command