Useful .gitconfig options

Separate git configurations for file paths

In some situations it might be ideal to have differing git configs based on the working directory, for example if using the same machine for work and personal business. The git [include] directive can automatically load configuration files based on simple conditionals. For example:

[include]
path = ~/.gitconfig.personal
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig.work

diff.noprefix true

Removes the a/, b/, etc. tags from diff related commands:

diff --git a/poem.txt b/poem.txt
index 269bd58..be8e407 100644
--- a/poem.txt
+++ b/poem.txt
@@ -3,3 +3,4 @@
He destroyed his cage
Yes
YES
The tiger is out
+
diff --git poem.txt poem.txt
index 269bd58..be8e407 100644
--- poem.txt
+++ poem.txt
@@ -3,3 +3,4 @@
He destroyed his cage
Yes
YES
The tiger is out
+

help.autocorrect [N]

Makes git automatically execute the suggested command when executing something with a spelling errors in it.

The argument N denotes tenths of seconds to wait.

$ git stats
git: 'stats' is not a git command. See 'git --help'.
The most similar command is
status
$ git stats
WARNING: You called a Git command named 'stats', which does not exist.
Continuing in 1.0 seconds, assuming that you meant 'status'.
On branch master
nothing to commit, working tree clean

log.abbrevCommit true

In case you do not use a custom log alias, it might be desirable to only show the first six characters of the commit hash in the log output.

commit 8bf0f88d5d57e55d6dd2d05e44f593ab62512b6b (HEAD -> master)
Author: Ava Yert
Date: Wed Mar 2 22:07:57 2022 +0200

Change config format to toml
commit 8bf0f88 (HEAD -> master)
Author: Ava Yert
Date: Wed Mar 2 22:07:57 2022 +0200
Change config format to toml

log.follow true

Adds the --follow flag to log related commands, allowing one to view the history of a file across renames.

merge.conflictstyle diff3

In case of a merge conflict, in addition to showing our and their revisions, additionally shows the original revision.

<<<<<<< HEAD
host = localhost:8000
=======
host = localhost:8080
>>>>>>> incoming
password = password123
<<<<<<< HEAD
host = localhost:8000
||||||| 7276a9f
host = localhost
=======
host = localhost:8080
>>>>>>> incoming
password = password123

push.followTags true

Makes git push push any tags in addition to commits.

rerere.enabled true

Turns on git rerere by default.

status.showUntrackedFiles all

Makes git recursively show untracked files within folders.

Untracked files:
(use "git add <file>..." to include in what will be committed)
test/
Untracked files:
(use "git add <file>..." to include in what will be committed)
test/code.py
test/secret.txt