Boost Your Git DX second update out now

Be on it like a comet!

Today I have released the second update to Boost Your Git DX, my book of developer experience (DX) recommendations for using Git. Since the last update (2024-04-04), it has grown again by 28 pages, for a new total of 391 pages!

Changes include:

Thanks to everyone who has supported this book so far: nearly 1,000 readers, with 35 ratings averaging 4.97 stars. Here are a few reviews picked from the Gumroad page:

This book is simply amazing, from page 1 the content in invaluable with tips and tricks that will make any dev more productive. Thank you Adam for the great book.

—Gary Jarrel

In a similar spirit to Adam's other excellent Django DX book, this book provides a fluff free tour through lots of little quality of life improvements for developers, not just for using git, but other things around developer shell workflow.

—R Mawlabaux

This book transformed my day-to-day operations. As a self-taught engineer, I have found myself starved for mentorship, and Boost Your Git DX was my most influential mentor in 2023. If you're looking to maximize the usefulness of Git past basic version control, you will love this book.

—Anonymous

Many improvements in this edition came from reader feedback, so please keep that coming. There are feedback form links at the end of each chapter to make it easy, but an email is good too!

This update is free for all existing readers. Indeed, all my books come with free updates for life.

If you’re already a reader, download the new version using the Gumroad link in your email receipt. To help you catch up, the introduction chapter has a changelog with links to the updated sections (reproduced below).

Otherwise, buy it today and dive in. The book is available individually or bundled with Boost Your Django DX for a discount. There’s also an automatic discount to match local purchasing power in your country.

Buy now on Gumroad

Or download a free sample first.

May you Git good in 2025,

—Adam

Changelog

Table of contents

  1. Introduction
    1. About this book
      • Read in any order
      • Example commands and resources
      • End-of-chapter feedback links
    2. Acknowledgements
    3. Changelog
  2. Global configuration
    1. Git’s configuration files
      • Store global configuration in ~/.config/git
      • Migrate from legacy ~/.gitconfig to ~/.config/git/config
      • Read and change options with git config
      • Trace options with git config --show-scope and --show-origin
    2. Basic configuration
      • Set your name and email address
      • Use a different email address based on the working directory
      • Use your favourite editor
      • Set up a global ignore file
      • Improve the default colourization with color.* options
      • Enable help.autoCorrect to fix mistyped commands
    3. Back up your configuration
      • Set up your dotfiles repository
      • Save ongoing configuration changes
      • Track other configuration files
      • Restore your backup
  3. Aliases
    1. Shell aliases
      • Create shell aliases with alias <name>=<command>
      • List aliases with alias
      • Bypass aliases with \
    2. Git aliases
      • Create an alias that runs a single Git command
      • Create an alias that runs shell commands
      • Add a git git alias to help when you lose attention
  4. Shell configuration
    1. oh-my-zsh: instant enhancements and aliases
      • Install oh-my-zsh
      • Some handy Git aliases
      • Learn your aliases on the go with zsh-you-should-use
    2. Starship: a powerful, performant prompt
      • Install Starship
      • Personalize your prompt
      • Read Git state at a glance with Starship’s prompt
  5. Command line tools
    1. Less: the power pager
      • Activate lesser-known features with the LESS environment variable
      • Scroll and search with keyboard shortcuts
      • Search forwards with / and backwards with ?
      • Use Less with more Git commands
    2. delta: dapper diff display
      • Install and configure delta
      • How delta enhances Git’s output
      • Temporarily disable delta
      • Run delta directly as a diff tool
      • Show a side-by-side diffs with delta -s or delta.side-by-side
    3. ripgrep: rip-roaringly rapid grep
      • Install ripgrep
      • Search basics
      • Change case sensitivity with -i or -S
      • Hyperlink file paths with --hyperlink-format
      • Unrestrict searches with specific options or -u
      • Filter by file extensions with -g or -t
      • Configure ripgrep in ~/.config/ripgreprc
      • Combine with delta for paging and enhanced formatting
  6. Repository configuration
    1. Ignore files
      • The basics of ignore files
      • Ignore file tips
      • Commands for debugging ignore files
  7. Hooks and the pre-commit framework
    1. Git hooks
    2. pre-commit: Universal Hook Manager
      • Install pre-commit
      • Configure pre-commit
      • Update hooks with pre-commit autoupdate
      • Extra protection from pre-commit-hooks
      • ripsecrets: Protect your secrets
      • Find more hooks
      • Skip hooks temporarily with --no-verify or SKIP
      • oh-my-zsh plugin
      • pre-commit ci: continuous integration for your hooks
  8. Command commonalities
    1. Common options
      • Get short or long help with -h or --help
      • Condense output with column.ui=auto
      • Override configuration with -c
      • Use repositories in other directories with -C
    2. Commit SHAs
      • SHA abbreviation
      • Show and copy the current commit SHA
    3. Commit references
      • Single commit references
      • Commit range references
    4. Date specifications
      • Top formats
    5. Pathspecs
      • Top pathspec syntaxes
      • Using pathspecs
  9. init and clone
    1. init
      • init basics
      • Make the default branch name main with init.defaultBranch
      • Alias master as main in legacy repositories
      • Create a futuristic SHA-256 repository with --object-format=sha256
    2. clone
      • clone basics
      • Manage credentials with Git Credential Manager (GCM)
      • Clone partial history with --depth or --shallow-since
      • Optimize duplicate clones with a local path or --reference and --dissociate
  10. branch and switch
    1. branch
      • List branches with the bare command or -l
      • Sort branches by recency with branch.sort and select with fzf (fuzzy finder)
      • List branches missing a given commit with --no-contains
      • Delete old branches on your Git host automatically
      • Prune fetched remote branches with fetch.prune
      • Delete local merged branches with a rm-merged alias
    2. switch
      • switch basics
      • Check out tags or old commits by detaching with -d
      • Create a new branch from a different start point
      • Speed up switching with parallel checkout by setting checkout.workers=0
  11. status and diff
    1. status
      • Enable denser output with --short or status.short
      • Shorten long format by disabling advice with advice.statusHints
      • Hide untracked files with -uno
    2. diff
      • Improve diff generation with diff.algorithm=histogram
      • See more context with diff.interHunkContext
      • Enable language-specific hunk headings
      • Diff media files with ExifTool
      • Diff document files with Pandoc
      • Make file paths complete with diff.srcPrefix and diff.dstPrefix
      • List changed files with git diff --name-only
  12. add and restore
    1. add (and mv and rm)
      • The three commands: add, mv, and rm
      • Add interactively with git add -p
      • Add all changes with git add -u or -A
    2. restore
      • Use git restore instead of checkout and reset
      • Top git restore commands
      • Restore interactively with -p
  13. commit and reset
    1. commit
      • Improve commit message editing with verbose mode and “scissors” cleanup
      • Use -m to set the message without your editor
      • Use -a or an alias to add all files and commit
      • Declare coauthors in co-authored-by trailers
      • Update the previous commit with --amend
      • Create empty commits with --allow-empty
    2. reset
      • Undo commits and keep their changes with --mixed or --soft
      • Undo commits and discard their changes with --keep (not --hard)
      • Useful commit references for resetting
  14. stash and apply
    1. stash
      • stash basics
      • Push stash entries with a description with -m
      • Stash selected files by pathspec
      • Stash only unstaged changes with -k or staged changes with -S
      • Stash selected hunks interactively with -p
      • Automatically stash during merge and rebase with the autostash options
      • Stash untracked files with -u (and see them with stash.showIncludeUntracked)
    2. apply
      • apply basics
      • Send and receive patches by copy and paste
      • apply outside of a Git repository
  15. push and pull
    1. push
      • Automatically create upstream branches with push.autoSetupRemote
      • Force push safely with --force-with-lease and --force-if-includes
      • Push a commit and its annotated tags with --follow-tags
    2. pull
      • Rebase divergent branches when you pull with pull.rebase
      • Make a branch pull from and push to different remotes
  16. merge and rebase
    1. merge
      • Improve conflict display with the zdiff3 style
      • Open all conflicted files with the edit-unmerged alias
      • Enable rerere to reuse recorded (conflict) resolutions
      • Pick one side of conflicts with git restore or git merge -X
      • Check the in-progress commits with @ and MERGE_HEAD
    2. rebase
      • Control rebasing with interactive mode (-i)
      • Top interactive mode actions
      • Squash and rebase a branch with --keep-base
      • Rebase stacked branches with --update-refs
      • Run a command at each step with -x
      • Check the in-progress commits with @, REBASE_HEAD, and ORIG_HEAD
      • Automatically fix up commits with rebase.autoSquash
      • Drop already-merged commits with --empty drop
  17. log and reflog
    1. log
      • Three levels of detail: --oneline, --stat, and --patch
      • Reveal branching structure with --graph
      • Collapse merge commits with --first-parent
      • Filter by changes with the pickaxe options -S and -G
      • Filter by commit message content with --grep
      • Restrict time with --since and --until
      • Sort oldest first with --reverse
      • Follow changes to a single file with --follow
      • Follow changes to a code block with -L
      • Reveal hidden changes in merge commits with --cc
    2. reflog
      • reflog basics
      • Restore a deleted branch
      • Undo a commit amendment
      • Undo a rebase
  18. blame and bisect
    1. blame
      • blame basics
      • Blame a code block with -L
      • Ignore mass-change commits with blame.ignoreRevsFile
      • Ignore code copying with -C (-C -C)
    2. bisect
      • bisect basics
      • Mark a commit as untestable with git bisect skip
      • Automate testing with git bisect run
      • Automate testing of performance regressions
  19. worktree
    1. worktree
      • worktree basics
      • Using a worktree to write a hotfix
  20. Outroduction
    1. Honourable mentions
      • Git features
      • Extra tools
      • Just for fun
    2. Further reading
      • Git updates
      • Git under the hood
    3. Thank you

Subscribe via RSS, Twitter, Mastodon, or email:

One summary email a week, no spam, I pinky promise.

Tags: