chiark / gitweb /
git-debrebase: merge: Use a fresh branch and check out again
[dgit.git] / dgit-maint-debrebase.7.pod
index b17833e..0f2f892 100644 (file)
@@ -262,7 +262,7 @@ The first dgit push will require I<--overwrite>.
 
 =head1 GIT CONFIGURATION
 
-git-debrebase does not yet support using B<git merge> to merge
+git-debrebase(1) does not yet support using B<git merge> to merge
 divergent branches of development (see "OTHER MERGES" in
 git-debrebase(5)).  You should configure git such that B<git pull>
 does not try to merge:
@@ -323,7 +323,7 @@ or if you have a working watch file
 
 =over 4
 
-    % git debrebase new-upstream-v0 1.2.3
+    % git debrebase new-upstream 1.2.3
 
 =back
 
@@ -406,7 +406,8 @@ is a single debrebase stitch.
 =head1 BUILDING AND UPLOADING
 
 You can use dpkg-buildpackage(1) for test builds.  When you are ready
-to build for an upload, use B<dgit sbuild>.
+to build for an upload, use B<dgit sbuild>, B<dgit pbuilder> or B<dgit
+cowbuilder>.
 
 Upload with B<dgit push> or B<dgit push-source>.  Remember to pass
 I<--new> if the package is new in the target suite.
@@ -456,7 +457,7 @@ For the first upstream release that requires DFSG filtering:
     % git commit -m "upstream version 1.2.3 DFSG-cleaned"
     % git tag -s 1.2.3+dfsg
     % git checkout master
-    % # proceed with "Importing the release"
+    % # proceed with "Importing the release" on 1.2.3+dfsg tag
 
 =back
 
@@ -467,10 +468,10 @@ And for subsequent releases (whether or not they require filtering):
     % git checkout upstream-dfsg
     % git merge 1.2.4
     % git rm further-evil.bin # if needed
-    % git commit -m "upstream version 1.2.4 DFSG-cleaned"
+    % git commit -m "upstream version 1.2.4 DFSG-cleaned" # if needed
     % git tag -s 1.2.4+dfsg
     % git checkout master
-    % # proceed with "Importing the release"
+    % # proceed with "Importing the release" on 1.2.4+dfsg tag
 
 =back
 
@@ -544,13 +545,13 @@ A simple convention you can use to minimise the number of pseudomerges
 is to B<git debrebase conclude> only right before you upload or push
 to B<salsa.debian.org>.
 
-It is possible to reduce the number of pseudomerges further by
-derebasing only (i) when importing a new release, and (ii) right
-before uploading.  Instead of editing the existing delta queue, you
-append fixup commits (and reversions of commits) that alter the
-upstream source to the required state.  You can push and pull to and
-from B<salsa.debian.org> during this.  Just before uploading, you
-debrebase, once, to tidy everything up.
+It is possible, though much less convenient, to reduce the number of
+pseudomerges yet further.  We debrebase only (i) when importing a new
+release, and (ii) right before uploading.  Instead of editing the
+existing delta queue, you append fixup commits (and reversions of
+commits) that alter the upstream source to the required state.  You
+can push and pull to and from B<salsa.debian.org> during this.  Just
+before uploading, you debrebase, once, to tidy everything up.
 
 =head2 The debian/patches directory
 
@@ -559,16 +560,30 @@ git-debrebase(1).  You should not make changes there.  They will
 either cause trouble, or be ignored and overwritten by
 git-debrebase(1).
 
+I<debian/patches> will often be out-of-date because git-debrebase(1)
+will only regenerate it when it needs to.  So you should not rely on
+the information in that directory.  When preparing patches to forward
+upstream, you should use git-format-patch(1) on git commits, rather
+than sending files from I<debian/patches>.
+
 =head2 Upstream branches
 
-Except in the case where upstream releases only tarballs, we do not
-maintain a separate 'upstream' branch (unless you also happen to be
-involved in upstream development).  We work with upstream tags rather
-than any branches, except temporary branches used to prepare patches
-for forwarding upstream, for example.
+In this workflow, we specify upstream tags rather than any branches.
+
+Except when (i) upstream releases only tarballs, (ii) we require DFSG
+filtering, or (iii) you also happen to be involved in upstream
+development, we do not maintain any local branch corresponding to
+upstream, except temporary branches used to prepare patches for
+forwarding, and the like.
 
-The thought behind this is that from Debian's point of view, upstream
-releases are immutable points in history, better represented by tags.
+The idea here is that from Debian's point of view, upstream releases
+are immutable points in history.  We want to make sure that we are
+basing our Debian package on a properly identified upstream version,
+rather than some arbitrary commit on some branch.  Tags are more
+useful for this.
+
+Upstream's branches remain available as the git remote tracking
+branches for your upstream remote, e.g. I<remotes/upstream/master>.
 
 =head2 The first ever dgit push
 
@@ -604,17 +619,22 @@ using git-rebase(1) directly.  For example,
 
 =over 4
 
-    % git debrebase launder
+    % git debrebase
     % git rebase -i HEAD~5      # there are 4 Debian patches
 
 =back
 
 If you take this approach, you should be very careful not to start the
-rebase too early.
+rebase too early,
+including before the most recent pseudomerge.
+git-rebase without a base argument will often
+start the rebase too early,
+and should be avoided.
+Run git-debrebase instead.
 
 =head1 SEE ALSO
 
-dgit(1), dgit(7)
+dgit(1), dgit(7), git-debrebase(1), git-debrebase(5)
 
 =head1 AUTHOR