# Merge & Cherrypick

Contents

- Merge & Cherrypick

  - The merge method

  - Cherrypick

  - Lower-level methods

## The merge method

The method does a merge over the current working copy. It gets an Oid object as a parameter.

As its name says, it only does the merge, does not commit nor update the branch reference in the case of a fastforward.

For the moment, the merge does not support options, it will perform the merge with the default ones defined in GIT_MERGE_OPTS_INIT libgit2 constant.

Example:

    >>> other_branch_tip = '5ebeeebb320790caf276b9fc8b24546d63316533'
    >>> repo.merge(other_branch_tip)

You can now inspect the index file for conflicts and get back to the user to resolve if there are. Once there are no conflicts left, you can create a commit with these two parents.

    >>> user = repo.default_signature
    >>> tree = repo.index.write_tree()
    >>> message = "Merging branches"
    >>> new_commit = repo.create_commit('HEAD', user, user, message, tree,
                                        [repo.head.target, other_branch_tip])

## Cherrypick

Note that after a successful cherrypick you have to run `Repository.state_cleanup()` in order to get the repository out of cherrypicking mode.

## Lower-level methods

These methods allow more direct control over how to perform the merging. They do not modify the working directory and return an in-memory Index representing the result of the merge.