• First Git Config I Set on a New Machine

    Check what is already configured

    git config --list --show-origin --show-scope

    --show-origin prints the file the value came from. --show-scope shows whether it was system, global, local, worktree, or command. Git config is layered — a repository value can override your global one.

    Commit identity

    git config --global user.name "Your Name"
    git config --global user.email "you@example.com"

    These values become the author and committer recorded in every commit. They are not your GitHub/GitLab/SSH login.

    If you use different emails for work and personal projects, make Git stop guessing:

    git config --global user.useConfigOnly true

    Then set the email inside each repository that needs a different identity:

    git config user.email "you@company.example"

    Git will refuse to commit until you set it, which is better than discovering a work commit signed with a personal address.

    Initial branch name

    For repositories created with git init:

    git config --global init.defaultBranch main

    Affects new repositories only.

    Editor that waits

    Git opens an editor for commit messages, merges, rebase todos, and tags.

    git config --global core.editor "vim"

    For GUI editors make sure the command waits:

    git config --global core.editor "code --wait"

    Git must receive control back after you finish editing.

    Credential helper

    For HTTPS remotes, list the helpers available on your system:

    git help -a | grep credential-

    On macOS:

    git config --global credential.helper osxkeychain

    Other common choices: Git Credential Manager, libsecret on Linux desktops, Windows credential helpers.

    Avoid credential.helper store unless you knowingly accept that credentials are written to disk unencrypted.

    Aliases

    git config --global alias.st "status --short --branch"
    git config --global alias.lg "log --graph --decorate --oneline --all"
    git config --global alias.last "log -1 HEAD --stat"
    • git st — current branch and a compact file list.
    • git lg — commit graph with branch and tag names. Drop --all if it gets too noisy in a particular repository.
    • git last — last commit with stats.

    Edit the file directly

    For small one-off settings, git config --global key value is fine. Once there is more than a handful, edit the file:

    git config --global --edit

    Read a single value:

    git config --global --get user.email

    When something is set unexpectedly, the debugging tool is:

    git config --list --show-origin --show-scope