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'.