Please read the tutorial
L<dgit-maint-debrebase(5)>.
For background, theory of operation,
-and definitions of the terms used here,
-see L<git-debrebase(5)>.
+and definitions see L<git-debrebase(5)>.
-If no operation is specified,
-git-debrebase launders the branch and rebases the Debian delta queue.
-See below.
+You should read this manpage in conjunction with
+L<git-debrebase(5)/TERMINOLOGY>,
+which defines many important terms used here.
=head1 PRINCIPAL OPERATIONS
=item git-debrebase [-- <git-rebase options...>]
+=item git-debrebase [-i <further git-rebase options...>]
+
Unstitches and launders the branch.
(See L</UNSTITCHING AND LAUNDERING> below.)
-Then optionally edits the Debian delta queue,
+Then, if any git-rebase options were supplied,
+edits the Debian delta queue,
using git-rebase, by running
git rebase <git-rebase options> <breakwater-tip>
the branch will still have been laundered,
but everything in the rebase will be undone.
+The options for git-rebase must either start with C<-i>,
+or be prececded by C<-->,
+to distinguish them from options for git-debrebase.
+
+=item git-debrebase conclude
+
+Finishes a git-debrebase session,
+tidying up the branch and making it fast forward again.
+
+Specifically: if the branch is unstitched,
+launders and restitches it,
+making a new pseudomerge.
+Otherwise, it is an error,
+unless --noop-ok.
+
+=item git-debrebase quick
+
+Unconditionally launders and restitches the branch,
+consuming any ffq-prev
+and making a new pseudomerge.
+
+If the branch is already laundered and stitched, does nothing.
+
+=item git-debrebase prepush [--prose=<for commit message>]
+
=item git-debrebase stitch [--prose=<for commit message>]
-Stitch the branch,
+Stitches the branch,
consuming ffq-prev.
+This is a good command to run before pushing to a git server.
If there is no ffq-prev, it is an error, unless --noop-ok.
+You should consider using B<conclude> instead,
+because that launders the branch too.
+
=item git-debrebase new-upstream-v0 <new-version> [<upstream-details>...]
Rebases the delta queue
onto a new upstream version. In detail:
Firstly, checks that the proposed rebase seems to make sense:
-It is a problem unless the new upstream(s)
+It is a snag unless the new upstream(s)
are fast forward from the previous upstream(s)
as found in the current breakwater anchor.
-And, in the case of a multi-piece upstream,
+And, in the case of a multi-piece upstream
+(a multi-component upstream, in dpkg-source terminology),
if the pieces are not in the same order, with the same names.
If all seems well, unstitches and launders the branch.
If you git-rebase --abort,
the whole new upstream operation is aborted,
-but the laundering will still have been done.
+except for the laundering.
The <upstream-details> are, optionally, in order:
=over
-=item <upstream-commitish>
+=item <upstream-commit-ish>
-The new upstream branch (or commitish).
+The new upstream branch (or commit-ish).
Default is C<upstream>.
-It is a problem if the upstream contains a debian/ directory;
+It is a snag if the upstream contains a debian/ directory;
if forced to proceed,
git-debrebase will disregard the upstream's debian/ and
take (only) the packaging from the current breakwater.
-=item <piece-name> <piece-upstream-commitish>
+=item <piece-name> <piece-upstream-commit-ish>
Specifies that this is a multi-piece upstream.
-(A multi-component upstream, in dpkg-source terminology.)
May be repeated.
When such a pair is specified,
and then use the result as the combined new upstream.
For each <piece-name>,
-the tree of the <piece-upstream-commitish>
+the tree of the <piece-upstream-commit-ish>
becomes the subdirectory <piece-name>
in the combined new upstream
(supplanting any subdirectory that might be there in
passed to git-debrebase.
git-debrebase does not concern itself with source packages
so neither helps with this, nor checks it.
-L<git-archive(1)>, L<dgit(1)> and L<gbp(1)> may be able to help.
+L<git-deborig(1)>,
+L<git-archive(1)>, L<dgit(1)> and
+L<gbp-import-orig(1)> may be able to help.
This subcommand has -v0 in its name because we are not yet sure
that its command line syntax is optimal.
We may want to introduce an incompatible replacement syntax
under the name C<new-upstream>.
-=item git-debrebase convert-from-gbp [<upstream-commitish>]
+=item git-debrebase make-patches
+
+Generate patches in debian/patches/
+representing the changes made to upstream files.
+
+It is not normally necessary to run this command explicitly.
+When uploading to Debian,
+dgit and git-debrebase
+will cooperate to regenerate patches as necessary.
+When working with pure git remotes,
+the patches are not needed.
+
+Normally git-debrebase make-patches will
+require a laundered branch.
+(A laundered branch does not contain any patches.)
+But if there are already some patches made by
+git-debrebase make-patches,
+and all that has happened is that more
+changes to upstream files have been committed,
+running it again can add the missing patches.
+
+=item git-debrebase convert-from-gbp [<upstream-commit-ish>]
Cnnverts a gbp patches-unapplied branch
(not a gbp pq patch queue branch)
converting the quilt patches as a delta queue,
and dropping the patches from the tree.
-The upstream commitish should correspond to
-the gbp upstream branch.
-It is a problem if it is not an ancestor of HEAD,
+The upstream commit-ish should correspond to
+the gbp upstream branch, if there is one.
+It is a snag if it is not an ancestor of HEAD,
or if the history between the upstream and HEAD
contains commits which make changes to upstream files.
-It is also a problem if the specified upstream
+It is also a snag if the specified upstream
has a debian/ subdirectory.
This check exists to detect certain likely user errors,
but if this situation is true and expected,
=item git-debrebase breakwater
Prints the breakwater tip commitid.
-Fails if your HEAD branch is not laundered.
+If your HEAD branch is not fully laundered,
+prints the tip of the so-far-laundered breakwater.
+
+=item git-debrebase anchor
+
+Prints the breakwater anchor commitid.
=item git-debrebase analyse
This section documents the general options
to git-debrebase
-(ie, the ones which follow git-debrebase).
+(ie, the ones which immediately follow
+git-debrebase
+or
+git debrebase
+on the command line).
Individual operations may have their own options which are
docuented under each operation.
=over
-=item -f<problem-id>
+=item -f<snag-id>
-Turns problems with id <problem-id> into warnings.
+Turns snag(s) with id <snag-id> into warnings.
Some troublesome things which git-debrebase encounters
-are B<problem>s.
+are B<snag>s.
(The specific instances are discussed
in the text for the relvant operation.)
-When a problem is detected,
-a message is printed to stderr containing the problem id
-(in the form C<-f<problem-idE<gt>>),
+When a snag is detected,
+a message is printed to stderr containing the snag id
+(in the form C<-f<snag-idE<gt>>),
along with some prose.
-If problems are detected, git-debrebase does not continue,
-unless the relevant -f<problem-id> is specified,
+If snags are detected, git-debrebase does not continue,
+unless the relevant -f<snag-id> is specified,
or --force is specified.
=item --force
-Turns all problems into warnings.
-See the -f<problem-id> option.
+Turns all snags into warnings.
+See the -f<snag-id> option.
Do not invoke git-debrebase --force in scripts and aliases;
-instead, specify the particular -f<problem-id> for expected problems.
+instead, specify the particular -f<snag-id> for expected snags.
=item --noop-ok
The specific instances are discussed
in the text for the relvant operation.
-=item --anchor=<commitish>
+=item --anchor=<commit-ish>
-Treats <commitish> as an anchor,
-regardless of what it's actually like.
+Treats <commit-ish> as an anchor.
+This overrides the usual logic which automatically classifies
+commits as anchors, pseudomerges, delta queue commits, etc.
-(It is a problem for
-git-debrebase new-upstream operations
-if <commitish> is the previous anchor to be used,
-because treating an arbitrary commit as an anchor
-means forgoing upstream coherency checks.)
+It also disables some coherency checks
+which depend on metadata extracted from its commit message,
+so
+it is a snag if <commit-ish> is the anchor
+for the previous upstream version in
+git-debrebase new-upstream operations.
=item -D
=head2 Establish the current branch's ffq-prev
-If it is not yet recorded,
+If ffq-prev is not yet recorded,
git-debrebase checks that the current branch is ahead of relevant
remote tracking branches.
+The relevant branches depend on
+the current branch (and its
+git configuration)
+and are as follows:
-The remote tracking branches checked by default are
-obtained from the git config.
-In each case it is a problem if
-the local HEAD is behind the checked remote,
-or if local HEAD has diverged from it.
-All the checks are done locally using the remote tracking refs:
-git-debrebase does not fetch anything from anywhere.
+=over
+
+=item
+
+The branch that git would merge from
+(remote.<branch>.merge, remote.<branch>.remote);
+
+=item
+
+The branch git would push to, if different
+(remote.<branch>.pushRemote etc.);
+
+=item
+
+For local dgit suite branches,
+the corresponding tracking remote;
-git-debrebase checks the branch that git would merge from
-(remote.<branch>.merge, remote.<branch>.remote)
-and the branch git would push to
-(remote.<branch>.pushRemote etc.).
-For local dgit suite branches
-it checks the corresponding tracking remote.
-If you are on C<master>, it checks remotes/dgit/dgit/sid.
-The resulting ref names to check are filtered through
+=item
+
+If you are on C<master>,
+remotes/dgit/dgit/sid.
+
+=back
+
+The apparently relevant ref names to check are filtered through
branch.<branch>.ffq-ffrefs,
which is a semicolon-separated list of glob patterns,
each optionally preceded by !; first match wins.
+In each case it is a snag if
+the local HEAD is behind the checked remote,
+or if local HEAD has diverged from it.
+All the checks are done locally using the remote tracking refs:
+git-debrebase does not fetch anything from anywhere.
+
If these checks pass,
or are forced,
git-debrebse then records the current tip as ffq-prev.
git-debrebase(1),
dgit-maint-rebase(7),
-dgit(1)
+dgit(1),
+gitglossary(7)