code: def merge_tree(self, rhs, base=None):
          
          # -i : ignore working tree status
          # --aggressive : handle more merge cases
          # -m : do an actual merge
          args = ["--aggressive", "-i", "-m"]
          if base is not None:
              args.append(base)
          args.append(rhs)
  
          self.repo.git.read_tree(args)
          return self
docs: Merge the given rhs treeish into the current index, possibly taking
          a common base treeish into account.
  
          As opposed to the from_tree_ method, this allows you to use an already
          existing tree as the left side of the merge
  
          :param rhs:
              treeish reference pointing to the 'other' side of the merge.
  
          :param base:
              optional treeish reference pointing to the common base of 'rhs' and
              this index which equals lhs
  
          :return:
              self ( containing the merge and possibly unmerged entries in case of
              conflicts )
  
          :raise GitCommandError:
              If there is a merge conflict. The error will
              be raised at the first conflicting path. If you want to have proper
              merge resolution to be done by yourself, you have to commit the changed
              index ( or make a valid tree from it ) and retry with a three-way
              index.from_tree call.