Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gitting Things Done

Gitting Things Done

Presented on September 21 2022 at the PHP Laravel meetup, Eindhoven, The Netherlands.
https://www.meetup.com/php-laravel-eindhoven/events/288262013/
---------------------------------------------------------------
Git is the modern-day version management system of choice. We all know how to commit, push, pull and merge. But what about (interactive) rebasing, fixing up commits, cherry picking lines and bisecting the history?
And what are those atomic commits you keep hearing people talk about and why would they be of any use to you?

Come and learn how to get the most out of the tooling you already use every day, find ways to make life easier on the people who review your code and leave knowing how to create a clean commit history which is a joy to peruse.
---------------------------------------------------------------

Juliette Reinders Folmer

September 21, 2022
Tweet

More Decks by Juliette Reinders Folmer

Other Decks in Programming

Transcript

  1. Gitting Things Done
    Juliette Reinders Folmer
    Tweet about it: @jrf_nl

    View Slide

  2. What is
    Git ?
    Linnaea Mallette

    View Slide

  3. About Forks & Remotes

    View Slide


  4. There is no one truth
    kconnors

    View Slide

  5. Original Repo Fork A Fork B

    View Slide

  6. Original Repo Fork A Fork B

    View Slide

  7. Original Repo Fork A Fork B

    View Slide

  8. Original Repo Fork A Fork B

    View Slide


  9. There is no limit to the amount
    of remotes you can add
    or that can exist

    View Slide

  10. Pull
    I accept your truth as my truth

    View Slide

  11. Push
    My truth is now your truth

    View Slide

  12. Pull Request
    Will you accept my truth
    as your truth ?

    View Slide

  13. Merging a PR
    Thanks for asking.
    I accept your truth as my truth

    View Slide

  14. About
    Branches
    Paul de Bruin

    View Slide

  15. Branches are your
    Save Points

    View Slide

  16. COPY/DEL
    TEMP
    PR
    WAIT-FOR
    WIP
    TODO
    Use Branches Liberally

    View Slide

  17. How to Write
    History and Get
    Your PRs Accepted

    View Slide

  18. Useful ?

    View Slide

  19. Decypherable ?

    View Slide

  20. Clean

    View Slide


  21. A clean history requires
    forethought and discipline
    kconnors

    View Slide

  22. Atomic Commits
    Pass CI
    Easy to Review
    Focus on
    One Thing
    Self-contained

    View Slide

  23. Atomic Commits
    ===
    Story Telling

    View Slide

  24. Tools of The Trade
    ▪ Amend
    Steve Buissinne

    View Slide

  25. Tools of The Trade
    ▪ Amend
    ▪ Interactive Rebase
    Maria Yan

    View Slide

  26. Rebase

    View Slide

  27. Rebase

    View Slide

  28. Interactive Rebase

    View Slide

  29. Interactive Rebase

    View Slide

  30. squash
    pick
    fixup
    drop
    edit
    reword
    Interactive Rebase

    View Slide

  31. View Slide

  32. View Slide

  33. View Slide

  34. View Slide

  35. Squash vs Fixup
    ▪ Combines changes
    into one commit
    ▪ Combines the
    commit messages +
    presents for edit
    ▪ Combines changes
    into one commit
    ▪ Throws away all but
    the original commit
    message

    View Slide

  36. About Commit
    Messages
    ▪ Short description (title)
    ▪ Long description:
    Describe the why's
    ▪ Reference links
    ▪ Use proper punctuation!
    Voiculescu Bogdan

    View Slide

  37. Give Credit Where Credit is Due
    Prefix: description
    Long description explaining why the changes were made,
    why they were made in this way.
    What other solutions were considered and rejected
    and for what reason.
    Reference(s):
    • https://....
    Co-authored-by: Contributor Name

    View Slide

  38. Tools of The Trade
    ▪ Amend
    ▪ Interactive Rebase
    ▪ Cherry picking
    Enrica Bressan

    View Slide

  39. Cherry Picking
    Commits Files Lines

    View Slide

  40. Cherry Picking
    When
    committing
    From other
    commits
    From other
    branches

    View Slide

  41. K.C. Hohensee

    View Slide

  42. To Force Push Or Not To Force Push
    DO:
    ▪ Non-
    collaborative
    branch,
    not pulled
    ▪ Pulled,
    rebased,
    no changes
    MAYBE
    ▪ Pulled,
    typo/CS fix
    DON'T:
    ▪ Collaborative
    branch,
    not pulled
    ▪ Pulled,
    review has
    started

    View Slide

  43. When Things Go
    Wrong

    View Slide

  44. Reset vs Revert

    View Slide

  45. Reset vs Revert

    View Slide

  46. Reset vs Revert

    View Slide

  47. Reset vs Revert

    View Slide

  48. When Things Go
    Really Wrong

    View Slide

  49. Git Bisect
    to the Rescue
    Bad
    Good

    View Slide

  50. Git Bisect
    to the Rescue
    Bad
    Good
    Good or Bad ?

    View Slide

  51. Git Bisect
    to the Rescue
    Bad
    Good
    Good or Bad ?

    View Slide

  52. Git Bisect
    to the Rescue
    Bad
    Good
    Good or Bad ?
    Good or Bad ?

    View Slide

  53. Git Bisect
    to the Rescue
    Bad
    Good
    Good or Bad ?
    Good or Bad ?

    View Slide

  54. Git Bisect
    to the Rescue
    Bad
    Good
    Good or Bad ?
    Good or Bad ?
    Good or Bad ?

    View Slide

  55. Git Bisect
    to the Rescue
    Bad
    Good
    Good or Bad ?
    Good or Bad ?
    Good or Bad ?

    View Slide

  56. Git Bisect
    to the Rescue
    Bad
    Good
    Good or Bad ?
    Good or Bad ?
    Good or Bad ?

    View Slide

  57. When Things Go
    Really Really REALLY Wrong

    View Slide

  58. git reflog

    View Slide

  59. Keeping Your
    Codebase Clean
    Lisandra Barros Mendonça

    View Slide

  60. Commit vs Ignore
    In repo .gitignore .git/info/exclude
    Composer composer.json
    composer.lock
    /vendor/
    composer.lock
    NPM package.json /node_modules/
    package-lock.json
    PHPUnit phpunit.xml.dist phpunit.xml
    .phpunit.result.cache
    custom-phpunit.xml
    IDE of choice /.idea/
    OS specific *.bak
    .Trashes
    [Tt]humbs.db
    *.DS_store

    View Slide

  61. Keep Distribution Packages Clean
    # Exclude these files from release archives.
    /.gitattributes export-ignore
    /.gitignore export-ignore
    /phpunit.xml.dist export-ignore
    /tests/ export-ignore
    # Auto detect text files and perform LF normalization
    * text=auto
    # The above will handle all files NOT found below
    *.md text
    .gitattributes

    View Slide

  62. Git in Comfort
    Git Kraken SmartGit
    Aurees
    SourceTree
    GitExtensions
    CLI
    GitEye
    Git Cola

    View Slide

  63. Thanks!
    Any
    questions ?
    Slides: https://speakerdeck.com/jrf
    Feedback: https://joind.in/talk/dafa1
    @jrf_nl @jrfnl

    View Slide