code: def merge(self, branch, destination="master"):
          
          current_branch = self.current_branch()
          if current_branch != destination:
              _LOG.debug('checking out ' + destination)
              git(self.gitdir, self.gitwd, "checkout", destination)
          try:
              git(self.gitdir, self.gitwd, "merge", branch)
          except sh.ErrorReturnCode:
              _LOG.exception('merge failed')
              # attempt to reset things so other operations can continue
              git(self.gitdir, self.gitwd, "merge", "--abort")
              # raise an MergeException so that caller will know that the merge failed
              raise MergeException()
  
          new_sha = git(self.gitdir, self.gitwd, "rev-parse", "HEAD")
          return new_sha.strip()
docs: Merge the the given WIP branch to master (or destination, if specified)
  
          If the merge fails, the merge will be aborted
          and then a MergeException will be thrown. The
          message of the MergeException will be the
          "git status" output, so details about merge
          conflicts can be determined.