Complete Mercurial Branching Strategy

(Arne Babenhauserheide)
2013-01-26: include changes from Harvey done directly via the website

include changes from Harvey done directly via the website

diff --git a/workflow.txt b/workflow.txt
--- a/workflow.txt
+++ b/workflow.txt
@@ -98,136 +98,115 @@ Now we can look at all the actions you w
 We start with the full history. In the following sections, we will take it apart to see what the commands do. So just take a glance, take in the basic structure and then move on for the details.
 
     hg log -G
-    @    changeset:   18:4e7513c59cdc
+    @    changeset:   15:855a230f416f
     |\   tag:         tip
-    | |  parent:      16:2088b93fb3f4
-    | |  parent:      17:b0e9b96284d7
+    | |  parent:      13:e7f11bbc756c
+    | |  parent:      14:79b616e34057
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:49 2012 +0200
+    | |  date:        Sat Jan 26 15:39:49 2013 +0100
     | |  summary:     merged stable into default: ready for more development
     | |
-    | o  changeset:   17:b0e9b96284d7
+    | o  changeset:   14:79b616e34057
     |/|  branch:      stable
-    | |  parent:      11:cf4cf65df405
-    | |  parent:      16:2088b93fb3f4
+    | |  parent:      7:e8b509ebeaa9
+    | |  parent:      13:e7f11bbc756c
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:49 2012 +0200
+    | |  date:        Sat Jan 26 15:39:48 2013 +0100
     | |  summary:     merged default into stable for release
     | |
-    o |    changeset:   16:2088b93fb3f4
-    |\ \   parent:      14:684c6176ce71
-    | | |  parent:      15:168429fdaf57
+    o |    changeset:   13:e7f11bbc756c
+    |\ \   parent:      11:e77a94df3bfe
+    | | |  parent:      12:aefc8b3a1df2
     | | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | | |  date:        Sat Aug 18 10:53:48 2012 +0200
+    | | |  date:        Sat Jan 26 15:39:47 2013 +0100
     | | |  summary:     merged finished feature x into default
     | | |
-    | o |  changeset:   15:168429fdaf57
+    | o |  changeset:   12:aefc8b3a1df2
     | | |  branch:      feature-x
-    | | |  parent:      13:e3985e582fc4
+    | | |  parent:      9:1dd6209b2a71
     | | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | | |  date:        Sat Aug 18 10:53:47 2012 +0200
+    | | |  date:        Sat Jan 26 15:39:46 2013 +0100
     | | |  summary:     finished feature x
     | | |
-    o | |  changeset:   14:684c6176ce71
-    |\| |  parent:      12:70d38749f7dd
-    | | |  parent:      13:e3985e582fc4
+    o | |  changeset:   11:e77a94df3bfe
+    |\| |  parent:      10:8c423bc00eb6
+    | | |  parent:      9:1dd6209b2a71
     | | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | | |  date:        Sat Aug 18 10:53:46 2012 +0200
+    | | |  date:        Sat Jan 26 15:39:45 2013 +0100
     | | |  summary:     merged feature x into default
     | | |
-    | o |  changeset:   13:e3985e582fc4
+    o | |  changeset:   10:8c423bc00eb6
+    | | |  parent:      8:dc61c2731eda
+    | | |  user:        Arne Babenhauserheide <bab@draketo.de>
+    | | |  date:        Sat Jan 26 15:39:44 2013 +0100
+    | | |  summary:     3
+    | | |
+    | o |  changeset:   9:1dd6209b2a71
     |/ /   branch:      feature-x
     | |    user:        Arne Babenhauserheide <bab@draketo.de>
-    | |    date:        Sat Aug 18 10:53:45 2012 +0200
+    | |    date:        Sat Jan 26 15:39:43 2013 +0100
     | |    summary:     x
     | |
-    o |  changeset:   12:70d38749f7dd
-    |\|  parent:      9:760af400d190
-    | |  parent:      11:cf4cf65df405
+    o |  changeset:   8:dc61c2731eda
+    |\|  parent:      5:4c57fdadfa26
+    | |  parent:      7:e8b509ebeaa9
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:45 2012 +0200
+    | |  date:        Sat Jan 26 15:39:43 2013 +0100
     | |  summary:     merged stable into default: ready for more development
     | |
-    | o  changeset:   11:cf4cf65df405
+    | o  changeset:   7:e8b509ebeaa9
     | |  branch:      stable
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:44 2012 +0200
-    | |  summary:     Added tag v2 for changeset e834f3865c06
+    | |  date:        Sat Jan 26 15:39:42 2013 +0100
+    | |  summary:     Added tag v2 for changeset 089fb0af2801
     | |
-    | o  changeset:   10:e834f3865c06
+    | o  changeset:   6:089fb0af2801
     |/|  branch:      stable
     | |  tag:         v2
-    | |  parent:      8:b0163426d379
-    | |  parent:      9:760af400d190
+    | |  parent:      4:d987ce9fc7c6
+    | |  parent:      5:4c57fdadfa26
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:44 2012 +0200
+    | |  date:        Sat Jan 26 15:39:41 2013 +0100
     | |  summary:     merge default into stable for release
     | |
-    o |  changeset:   9:760af400d190
-    |\|  parent:      7:fccc0039a663
-    | |  parent:      8:b0163426d379
+    o |  changeset:   5:4c57fdadfa26
+    |\|  parent:      3:bc625b0bf090
+    | |  parent:      4:d987ce9fc7c6
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:43 2012 +0200
+    | |  date:        Sat Jan 26 15:39:40 2013 +0100
     | |  summary:     merge stable into default: ready for more development
     | |
-    | o  changeset:   8:b0163426d379
+    | o  changeset:   4:d987ce9fc7c6
     | |  branch:      stable
-    | |  parent:      6:2c9738672cc9
+    | |  parent:      1:a8b7e0472c5b
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:42 2012 +0200
+    | |  date:        Sat Jan 26 15:39:39 2013 +0100
     | |  summary:     hotfix
     | |
-    o |  changeset:   7:fccc0039a663
-    |\|  parent:      3:11f9f12f731f
-    | |  parent:      6:2c9738672cc9
+    o |  changeset:   3:bc625b0bf090
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:41 2012 +0200
+    | |  date:        Sat Jan 26 15:39:38 2013 +0100
+    | |  summary:     2
+    | |
+    o |  changeset:   2:3e8df435bcb0
+    |\|  parent:      0:f97ea6e468a1
+    | |  parent:      1:a8b7e0472c5b
+    | |  user:        Arne Babenhauserheide <bab@draketo.de>
+    | |  date:        Sat Jan 26 15:39:38 2013 +0100
     | |  summary:     merged stable into default: ready for more development
     | |
-    | o  changeset:   6:2c9738672cc9
-    | |  branch:      stable
-    | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:40 2012 +0200
-    | |  summary:     1
-    | |
-    | o  changeset:   5:aad8dc0a8278
-    |/|  branch:      stable
-    | |  parent:      4:4716ba4437bd
-    | |  parent:      3:11f9f12f731f
-    | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:25 2012 +0200
-    | |  summary:     merge default into stable for release
-    | |
-    | o  changeset:   4:4716ba4437bd
-    | |  branch:      stable
-    | |  parent:      1:4b85491178d5
-    | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:23 2012 +0200
-    | |  summary:     hotfix
-    | |
-    o |  changeset:   3:11f9f12f731f
-    | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:23 2012 +0200
-    | |  summary:     2
-    | |
-    o |  changeset:   2:ba0be60095fe
-    |\|  parent:      0:daf9b5f2fbc8
-    | |  parent:      1:4b85491178d5
-    | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:23 2012 +0200
-    | |  summary:     merged stable into default: ready for more development
-    | |
-    | o  changeset:   1:4b85491178d5
+    | o  changeset:   1:a8b7e0472c5b
     |/   branch:      stable
     |    user:        Arne Babenhauserheide <bab@draketo.de>
-    |    date:        Sat Aug 18 10:53:22 2012 +0200
-    |    summary:     Added tag v1 for changeset daf9b5f2fbc8
+    |    date:        Sat Jan 26 15:39:36 2013 +0100
+    |    summary:     Added tag v1 for changeset f97ea6e468a1
     |
-    o  changeset:   0:daf9b5f2fbc8
+    o  changeset:   0:f97ea6e468a1
        tag:         v1
        user:        Arne Babenhauserheide <bab@draketo.de>
-       date:        Sat Aug 18 10:53:21 2012 +0200
+       date:        Sat Jan 26 15:39:36 2013 +0100
        summary:     1
+    
 
 ## Action by action
 
@@ -240,9 +219,10 @@ We start with the full history. In the f
 
 Initializing and doing the first commit creates the first changeset:
 
-    o  changeset:   0:659f272feb3f
+    o  changeset:   0:f97ea6e468a1
+       tag:         v1
        user:        Arne Babenhauserheide <bab@draketo.de>
-       date:        Wed Aug 15 02:15:45 2012 +0200
+       date:        Sat Jan 26 15:39:36 2013 +0100
        summary:     1
 
 Nothing much to see here.
@@ -258,25 +238,26 @@ Commands:
 
 With the stable branch and first release, we add the tagging commit and merge back into default:
 
-    o    changeset:   2:db141e12249a
-    |\   parent:      0:659f272feb3f
-    | |  parent:      1:a61b0693b122
+    o    changeset:   2:3e8df435bcb0
+    |\   parent:      0:f97ea6e468a1
+    | |  parent:      1:a8b7e0472c5b
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:46 2012 +0200
+    | |  date:        Sat Jan 26 15:39:38 2013 +0100
     | |  summary:     merged stable into default: ready for more development
     | |
-    | o  changeset:   1:a61b0693b122
+    | o  changeset:   1:a8b7e0472c5b
     |/   branch:      stable
     |    user:        Arne Babenhauserheide <bab@draketo.de>
-    |    date:        Wed Aug 15 02:15:46 2012 +0200
-    |    summary:     Added tag v1 for changeset 659f272feb3f
+    |    date:        Sat Jan 26 15:39:36 2013 +0100
+    |    summary:     Added tag v1 for changeset f97ea6e468a1
     |
-    o  changeset:   0:659f272feb3f
+    o  changeset:   0:f97ea6e468a1
        tag:         v1
        user:        Arne Babenhauserheide <bab@draketo.de>
-       date:        Wed Aug 15 02:15:45 2012 +0200
+       date:        Sat Jan 26 15:39:36 2013 +0100
        summary:     1
 
+
 Mind the tag field which is now shown in changeset 0 and the branchname for changeset 1.
 
 Commands: 
@@ -294,16 +275,16 @@ Commands:
 
 Now we just chuck along. The one commit shown here could be an arbitrary number of commits.
 
-    o    changeset:   3:4eaa6643a13a
+    o    changeset:   3:bc625b0bf090
     |    user:        Arne Babenhauserheide <bab@draketo.de>
-    |    date:        Wed Aug 15 02:15:47 2012 +0200
+    |    date:        Sat Jan 26 15:39:38 2013 +0100
     |    summary:     2
     |  
-    o    changeset:   2:db141e12249a
-    |\   parent:      0:659f272feb3f
-    | |  parent:      1:a61b0693b122
+    o    changeset:   2:3e8df435bcb0
+    |\   parent:      0:f97ea6e468a1
+    | |  parent:      1:a8b7e0472c5b
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:46 2012 +0200
+    | |  date:        Sat Jan 26 15:39:38 2013 +0100
     | |  summary:     merged stable into default: ready for more development
 
 
@@ -318,30 +299,30 @@ Commands:
 
 If a hotfix has to be applied to the release out of order, we just update to the stable branch, apply the hotfix and then merge the stable branch into default[^merge-to-stable]. This gives us changesets 4 for the hotfix and 5 for the merge (2 and 3 are shown as reference).
 
-    o    changeset:   5:ffd4ca63de0d
-    |\   parent:      3:4eaa6643a13a
-    | |  parent:      4:0c6e99f9e245
+    o    changeset:   5:4c57fdadfa26
+    |\   parent:      3:bc625b0bf090
+    | |  parent:      4:d987ce9fc7c6
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:48 2012 +0200
+    | |  date:        Sat Jan 26 15:39:40 2013 +0100
     | |  summary:     merge stable into default: ready for more development
     | |
-    | o  changeset:   4:0c6e99f9e245
+    | o  changeset:   4:d987ce9fc7c6
     | |  branch:      stable
-    | |  parent:      1:a61b0693b122
+    | |  parent:      1:a8b7e0472c5b
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:47 2012 +0200
+    | |  date:        Sat Jan 26 15:39:39 2013 +0100
     | |  summary:     hotfix
     | |
-    o |  changeset:   3:4eaa6643a13a
+    o |  changeset:   3:bc625b0bf090
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:47 2012 +0200
+    | |  date:        Sat Jan 26 15:39:38 2013 +0100
     | |  summary:     2
     | |
-    o |  changeset:   2:db141e12249a
-    |\|  parent:      0:659f272feb3f
-    | |  parent:      1:a61b0693b122
+    o |  changeset:   2:3e8df435bcb0
+    |\|  parent:      0:f97ea6e468a1
+    | |  parent:      1:a8b7e0472c5b
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:46 2012 +0200
+    | |  date:        Sat Jan 26 15:39:38 2013 +0100
     | |  summary:     merged stable into default: ready for more development
 
 [^merge-to-stable]: We merge the hotfix into default to define the relevance of the fix for general development. If the hotfix also affects the current line of development, we keep its changes in the merge. If the current line of development does not need the hotfix, we discard its changes in the merge. We do this to ensure that it is clear in future how to treat the hotfix when merging new changes: let the merge record the decision.
@@ -362,35 +343,35 @@ Commands:
 
 *To do a regular release, we just merge the default branch into the stable branch and tag the merge. Then we merge stable back into default. This gives us changesets 6 to 8[^prepare-stable].*
 
-    o    changeset:   8:63909f1abcea
-    |\   parent:      5:ffd4ca63de0d
-    | |  parent:      7:e45bd0f59854
+    o    changeset:   8:dc61c2731eda
+    |\   parent:      5:4c57fdadfa26
+    | |  parent:      7:e8b509ebeaa9
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:50 2012 +0200
+    | |  date:        Sat Jan 26 15:39:43 2013 +0100
     | |  summary:     merged stable into default: ready for more development
     | |
-    | o  changeset:   7:e45bd0f59854
+    | o  changeset:   7:e8b509ebeaa9
     | |  branch:      stable
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:49 2012 +0200
-    | |  summary:     Added tag v2 for changeset c71102fdca59
+    | |  date:        Sat Jan 26 15:39:42 2013 +0100
+    | |  summary:     Added tag v2 for changeset 089fb0af2801
     | |
-    | o  changeset:   6:c71102fdca59
+    | o  changeset:   6:089fb0af2801
     |/|  branch:      stable
     | |  tag:         v2
-    | |  parent:      4:0c6e99f9e245
-    | |  parent:      5:ffd4ca63de0d
+    | |  parent:      4:d987ce9fc7c6
+    | |  parent:      5:4c57fdadfa26
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:49 2012 +0200
+    | |  date:        Sat Jan 26 15:39:41 2013 +0100
     | |  summary:     merge default into stable for release
     | |
-    o |  changeset:   5:ffd4ca63de0d
-    |\|  parent:      3:4eaa6643a13a
-    | |  parent:      4:0c6e99f9e245
+    o |  changeset:   5:4c57fdadfa26
+    |\|  parent:      3:bc625b0bf090
+    | |  parent:      4:d987ce9fc7c6
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Wed Aug 15 02:15:48 2012 +0200
+    | |  date:        Sat Jan 26 15:39:40 2013 +0100
     | |  summary:     merge stable into default: ready for more development
-
+    
 [^prepare-stable]: We can also merge to stable regularly as soon as some set of changes is considered stable, but without making an actual release (==tagging). That way we always have a stable branch which people can test without having to create releases right away. The releases are those changesets on the stable branch which carry a tag.
 
 
@@ -408,42 +389,48 @@ Commands:
 
 ### Feature branches
 
-*Now we want to do some larger development, so we use a feature branch. The one feature-commit shown here (x) could be an arbitrary number of commits, and as long as you stay in your branch, the development of your colleagues will not disturb your own work. Once the feature is finished, we merge it into default. That gives us changesets 12 to 16.*
+*Now we want to do some larger development, so we use a feature branch. The one feature-commit shown here (x) could be an arbitrary number of commits, and as long as you stay in your branch, the development of your colleagues will not disturb your own work. Once the feature is finished, we merge it into default. That gives us changesets 9 to 13.*
 
-    o      changeset:   16:2088b93fb3f4
-    |\     parent:      14:684c6176ce71
-    | |    parent:      15:168429fdaf57
-    | |    user:        Arne Babenhauserheide <bab@draketo.de>
-    | |    date:        Sat Aug 18 10:53:48 2012 +0200
-    | |    summary:     merged finished feature x into default
+    o    changeset:   13:e7f11bbc756c
+    |\   parent:      11:e77a94df3bfe
+    | |  parent:      12:aefc8b3a1df2
+    | |  user:        Arne Babenhauserheide <bab@draketo.de>
+    | |  date:        Sat Jan 26 15:39:47 2013 +0100
+    | |  summary:     merged finished feature x into default
     | |
-    | o    changeset:   15:168429fdaf57
-    | |    branch:      feature-x
-    | |    parent:      13:e3985e582fc4
-    | |    user:        Arne Babenhauserheide <bab@draketo.de>
-    | |    date:        Sat Aug 18 10:53:47 2012 +0200
-    | |    summary:     finished feature x
+    | o  changeset:   12:aefc8b3a1df2
+    | |  branch:      feature-x
+    | |  parent:      9:1dd6209b2a71
+    | |  user:        Arne Babenhauserheide <bab@draketo.de>
+    | |  date:        Sat Jan 26 15:39:46 2013 +0100
+    | |  summary:     finished feature x
     | |
-    o |    changeset:   14:684c6176ce71
-    |\|    parent:      12:70d38749f7dd
-    | |    parent:      13:e3985e582fc4
-    | |    user:        Arne Babenhauserheide <bab@draketo.de>
-    | |    date:        Sat Aug 18 10:53:46 2012 +0200
-    | |    summary:     merged feature x into default
+    o |  changeset:   11:e77a94df3bfe
+    |\|  parent:      10:8c423bc00eb6
+    | |  parent:      9:1dd6209b2a71
+    | |  user:        Arne Babenhauserheide <bab@draketo.de>
+    | |  date:        Sat Jan 26 15:39:45 2013 +0100
+    | |  summary:     merged feature x into default
     | |
-    | o    changeset:   13:e3985e582fc4
-    |/     branch:      feature-x
-    |      user:        Arne Babenhauserheide <bab@draketo.de>
-    |      date:        Sat Aug 18 10:53:45 2012 +0200
-    |      summary:     x
-    | 
-    o    changeset:   12:70d38749f7dd
-    |\   parent:      9:760af400d190
-    | |  parent:      11:cf4cf65df405
+    o |  changeset:   10:8c423bc00eb6
+    | |  parent:      8:dc61c2731eda
     | |  user:        Arne Babenhauserheide <bab@draketo.de>
-    | |  date:        Sat Aug 18 10:53:45 2012 +0200
+    | |  date:        Sat Jan 26 15:39:44 2013 +0100
+    | |  summary:     3
+    | |
+    | o  changeset:   9:1dd6209b2a71
+    |/   branch:      feature-x
+    |    user:        Arne Babenhauserheide <bab@draketo.de>
+    |    date:        Sat Jan 26 15:39:43 2013 +0100
+    |    summary:     x
+    |  
+    o    changeset:   8:dc61c2731eda
+    |\   parent:      5:4c57fdadfa26
+    | |  parent:      7:e8b509ebeaa9
+    | |  user:        Arne Babenhauserheide <bab@draketo.de>
+    | |  date:        Sat Jan 26 15:39:43 2013 +0100
     | |  summary:     merged stable into default: ready for more development
-
+    
 
 Commands: