$30 off During Our Annual Pro Sale. View Details »

Rebasing Workflow - OSCON 2015

Rebasing Workflow - OSCON 2015

Emma Jane Hogbin Westby

July 22, 2015
Tweet

More Decks by Emma Jane Hogbin Westby

Other Decks in Technology

Transcript

  1. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    A Rebasing Workflow
    Emma Jane Hogbin Westby
    www.gitforteams.com
    @emmajanehw

    View Slide

  2. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Agenda
    • the tl;dl
    • Rant: why I don't like rebasing
    • Rave: when / why I use rebase
    • Wrap-up
    • Q&A

    View Slide

  3. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    the tl;dl
    too long; didn't listen

    View Slide

  4. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Why should I rebase?
    • Because it makes your commit history easier to read, and manipulate.
    • “Because Joe told me to.”

    View Slide

  5. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Rebasing is like

    a malleable sports re-play.
    Step 1. Rewind the history of your branch.
    Step 2. Apply new commits from an outside source.
    Step 3. Then re-apply your work.

    View Slide

  6. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    When should I rebase?
    • Before sharing proposed work.
    • To update your local working
    branch.
    • To split a commit into two.
    • To squash multiple commits
    into one.
    $ git rebase -i edit
    $ git rebase -i squash
    $ git rebase

    View Slide

  7. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    How do I rebase?
    • Squash a bunch of tiny commits into one:
    $ git rebase --interactive
    • Bring your local, working branch up-to-date
    $ git pull master
    $ git checkout my_local_branch
    $ git rebase master

    View Slide

  8. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Groundhog Day Conflict?!
    • Resolve the conflict and then immediately save your recorded solution
    with:
    $ git rerere
    • Proactively turn on REuse REcorded REsolution:
    $ git config --global rerere.enabled true
    • Bad merge? Git will remember the wrong resolution. Immediately forget
    how you resolved it with:
    $ git rerere forget

    View Slide

  9. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    How do I stop rebasing?
    • If things go right, it will stop on its own.
    • If there are tears, you can abort.
    $ git rebase --abort

    View Slide

  10. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    let the rants begin!

    View Slide

  11. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Rant
    Why I don’t like rebasing.

    View Slide

  12. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Historical Revisionism

    View Slide

  13. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    View Slide

  14. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    View Slide

  15. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    View Slide

  16. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    View Slide

  17. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Rave
    Why I love the effects of rebasing.

    View Slide

  18. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Making Whole
    Thoughts

    View Slide

  19. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Resources for

    Good Commit Messages
    gitforteams.com/resources/commit-granularity.html

    View Slide

  20. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Converting Conversations
    to Conclusions

    View Slide

  21. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Patches vs.
    Pull Requests

    View Slide

  22. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Merge vs. Rebase

    View Slide

  23. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Drawing the history graph before
    running a command
    will help you
    choose the right command.

    View Slide

  24. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    View Slide

  25. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    View Slide

  26. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw

    View Slide

  27. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    Choosing a Strategy
    • Pull = Fetch + Merge
    • Merge -> no fast forward (“true merge”)
    • Merge -> with fast forward
    • Merge with --squash -> all into one
    • Rebase -> rewind + replay
    • Cherry Pick -> copy and paste commits

    View Slide

  28. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    In Summary
    • The benefits of rebasing are most apparent to projects with multiple
    branches and multiple committers.
    • Rebasing allows you to reshape commit history so that you are storing
    conclusions, not conversations.
    • Rebasing can be used in place of merge to update a branch and results
    in a simplified graph of your repository history.
    • Rebasing can be used interactively to reshape a series of commits.

    View Slide

  29. https://speakerdeck.com/emmajane/a-rebasing-workflow-for-git
    @emmajanehw
    www.gitforteams.com
    Emma Jane Hogbin Westby
    @emmajanehw

    View Slide