title: Git: break a large+messy feature branch into smaller branches
body: <p>I have a feature branch that has grown and grown, with lots of twists and turns as the feature evolved. I'd like to break some separately-releasable chunks off into their own branches.</p>
  
  <p>The commits aren't clean enough to build such branches by selecting by commit (i.e. some commits touch multiple files, only some of which I want to select). I'm a deft hand at interactive-rebasing, hunk-editing, etc. but I wonder if there's a better way to do this?</p>
  
  <p>My initial thought is to create a branch that's a copy of the original feature branch, squash all it's commits into 1, reset to the previous commit (leaving the full uncommitted, unstaged feature branch in my working tree), then selectively add and commit the pieces I want.</p>
  
  <pre><code>$ git co -b partial-feature
  $ git rebase -i HEAD~170
  </code></pre>
  
  <p>In the editor:</p>
  
  <pre><code>pick 234e78fa Begin writing feature
  f 7844c437 Add more stuff
  f 3523437 And even more
  ...
  </code></pre>
  
  <p>Then,</p>
  
  <pre><code>$ git reset HEAD~
  $ git add first_good_change.rb
  $ git commit -m 'Add a good change'
  $ git add second_good_change.rb
  $ git commit -m 'Add another good change'
  ...
  </code></pre>
  
  <p>Is there a smarter way?</p>