********************************************************************** Merge & Cherrypick ********************************************************************** .. contents:: .. automethod:: pygit2.Repository.merge_base .. automethod:: pygit2.Repository.merge .. automethod:: pygit2.Repository.merge_analysis 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 =================== .. automethod:: pygit2.Repository.cherrypick Note that after a successful cherrypick you have to run :py:meth:`.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. .. automethod:: pygit2.Repository.merge_commits .. automethod:: pygit2.Repository.merge_trees N-way merges ============ The following methods perform the calculation for a base to an n-way merge. .. automethod:: pygit2.Repository.merge_base_many .. automethod:: pygit2.Repository.merge_base_octopus With this base at hand one can do repeated invokations of :py:meth:`.Repository.merge_commits` and :py:meth:`.Repository.merge_trees` to perform the actual merge into one tree (and deal with conflicts along the way).