git-reintegrate(1)
==================

NAME
----
git-reintegrate - Manage integration branches in Git

SYNOPSIS
--------
[verse]
'git reintegrate' --create <name> [<base>]
'git-reintegrate' --generate <name> [<base>]
'git-reintegrate' --add=<name>
'git-reintegrate' (--edit | --rebuild | --cat | --status) [<name>]
'git reintegrate' (--continue | --abort)

DESCRIPTION
-----------
This tool is a helper to be able to manage integration branches in Git easily.
It does so by specifying a list of merges to be applied on top of a base
branch. Each one of these merges can have a description that will be used as
the merge commit message.

This instruction sheet can autogenerated and modified in various ways through
the command line, or manually edited.

Finally the integration branch can be rebuilt, and previous conflicts
resolutions can be reused thanks to `git rerere`.

OPTIONS
-------
--create::
	Create a new integration branch.
+
If no base is specified, 'master' is assumed.

--generate::
	Generates the instruction sheet basied on an existing integration
	branch. The messages of each merge commit will be parsed to construct
	the instructions. The messages should be in the standard form
	`Merge branch 'name'` (or remote branch).
+
If no base is specified, 'master' is assumed.

--[no-]rebuild::
	Rebuild the integration branch.

--edit::
	Edit the instruction sheet.

--cat::
	Print the instruction sheet.

--status::
	Prints the status of the integration branch.

--add=<branch>::
	Appends a line `merge <branch>` to the instruction list, causing that
	branch to be included in the integration branch when it is next
	rebuilt.  This option may be specified multiple times to add multiple
	branches.

--continue::
	Restart the rebuild process after having resolved a merge conflict.

--abort::
	Abort the rebuild operation.

--[no-]autocontinue::
	Continues automatically if the rerere mechanism manages to resolve all
	conflicts during a merge.

If `--continue` or `--abort` are specified then no other options may be given.

CONFIGURATION
-------------

integration.autocontinue::
	Sets the default for the `--autocontinue` option.

integration.autorebuild::
	Automatically rebuild the integration branch after creating/editing it
	if `--no-rebuild` is not specified.

FORMAT OF INSTRUCTIONS
----------------------
The instruction sheet consists of a series of instructions which begin in
column zero, each of which may be followed by indented comments.  The
following instructions are supported:

+base+ '<ref>'::
	Resets the state of the integration branch to the specified revision.
	This should always be the first instruction in the instruction sheet,
	and should appear only at the top of the instruction sheet.

+merge+ '<ref>' '[<options>]'::
	Merges the specified ref into the integration branch.  Any comments
	following the instruction are appended to the merge commit's commit
	message.
+
If any options are given after the ref (and on the same line) then these are
passed to 'git merge'.  This may be useful for specifying an alternative merge
strategy for a branch.

+fixup+ '<ref>'::
	Picks up an existing commit to be applied on top of a merge as a fixup.

+commit+::
	Adds an empty commit with the specified message mostly to be used as a
	comment.

+pause+::
	Pauses the rebuild process, so the user can do certain actions
	manually, for example fixing a wrong conflict resoltion.

+.+ '<args...>'::
	Ignores this command and its description.  This can be used to remove
	a branch from the integration branch without needing to delete it and
	its description from the instruction sheet.

Example
~~~~~~~
------
base master

merge my-experimental-feature

  I think this is a good idea, but want to dogfood it before I
  decide whether to submit it upstream.

merge my-site-specific-changes

  Some changes to suit my environment.  DO NOT SUBMIT THESE.
------
