def push(remote_name, local_branch, remote_branch, opts = {})
      if opts[:delete]
        return push_delete(remote_branch || local_branch, remote_name, opts)
      else
        return push_to_remote(local_branch, remote_branch, remote_name, opts)
      end
    end
def push(remote_name, local_branch, remote_branch, opts = {})
      if opts[:delete]
        return push_delete(remote_branch || local_branch, remote_name, opts)
      else
        return push_to_remote(local_branch, remote_branch, remote_name, opts)
      end
    end
Pushes the given branch to the server.

 @param [String] remote_name the repository name; nil -> 'origin'
 @param [String] local_branch the local branch to push; nil -> the current branch
 @param [String] remote_branch the name of the branch to push to; nil -> same as local_branch

 @option opts [Boolean, String] :delete delete the remote branch
 @option opts [Boolean] :force force the update, even if not a fast-forward?

 @return [String] the output of the push command

 @raise [ArgumentError] if :delete is true, but no branch name is given