code: def push(self, refspec=None, progress=None, **kwargs):
          
          kwargs = add_progress(kwargs, self.repo.git, progress)
          proc = self.repo.git.push(self, refspec, porcelain=True, as_process=True,
                                    universal_newlines=True, **kwargs)
          return self._get_push_info(proc, progress)
docs: Push changes from source branch in refspec to target branch in refspec.
  
          :param refspec: see 'fetch' method
          :param progress:
              Can take one of many value types:
  
              * None to discard progress information
              * A function (callable) that is called with the progress information.
  
                Signature: ``progress(op_code, cur_count, max_count=None, message='')``.
  
               `Click here <http://goo.gl/NPa7st>`_ for a description of all arguments
                given to the function.
              * An instance of a class derived from ``git.RemoteProgress`` that
                overrides the ``update()`` function.
  
          :note: No further progress information is returned after push returns.
          :param kwargs: Additional arguments to be passed to git-push
          :return:
              IterableList(PushInfo, ...) iterable list of PushInfo instances, each
              one informing about an individual head which had been updated on the remote
              side.
              If the push contains rejected heads, these will have the PushInfo.ERROR bit set
              in their flags.
              If the operation fails completely, the length of the returned IterableList will
              be null.