URI: 
       GIT WORKFLOW PATTERNS
       
       Below are git workflows I have used and thought were helpful enough to
       preserve and share. I'm still a git newb, so these may not always be
       best practices. If that scares you, come back tomorrow and I may have
       some better practices for you.
       
       
       Rebase and cherry pick to avoid unintuitive merges
       ----------------------------------------------------------------------
       
       
       I am working on PR for a new feature for some project. A contributor
       merged the development branch `dev' into my PR branch so as to have
       the PR contain new work done on `dev'. In my mind, this operation
       should have been performed as a rebase, since the PR branch will
       eventually be merged into `dev', and no conflicts needed to be
       fixed. The same contributor also added a commit the PR, which
       contained some new code. This is what I did to fix the history of this
       PR, while preserving the new commit.
       
       I fetched the PR, `origin/new-feature'. Then I checked out the branch:
       `git checkout origin/new-feature'. Next, I reviewed the log to see
       which commit I needed to cherry pick: `git log' (I did this
       visually--there may be a more exacting method). I identified the
       commits and made their hashes available in a scratch pad.
       
       My local branch tracking the PR did not include the contributor's
       work. This meant I could use it as a base for the next set of
       procedures, reapplying the latest commits on `dev' and integrating the
       contributor's work. So I switched to a throwaway branch, `git switch
       -c _new-feature'. Then I rebased `dev': `git rebase dev'. Next, I
       cherry pick the contributor's commits: `git cherry-pick <hash>' and
       `git cherry-pick --continue'. Just to be sure I got everything, I
       compare this branch with the PR: `git diff _new-feature
       origin/new-feature'. Everything looks good so I rebase the throwaway
       branch onto the local PR branch and then force push it upwards: `git
       rebase _new-feature new-feature', `git push --force origin'.