What Do I Put in My .gitconfig?
Where do I put my .gitconfig?
When I spin up a dev environment, the first thing I want to do is drop in my user .gitconfig
file, and I always forget where to put it. BTW, you just drop it in your home folder ~/.gitconfig
, so on my PC C:/Users/giulianat/.gitconfig
, and on my mac /Users/giulianat/.gitconfig
. This is also where your user-level .gitignore
file goes (more on this later).
You can find my entire .gitconfig file on GitHub.
Aliases
Some things you might just want to abbreviate
ch = checkout
br = branch
ci = commit
st = status
Some things you might just want to forget about the options
brename = branch -m
I misspell my branch names ALL 👏 THE 👏 TIME and I always forget how to rename them, so I store it into an alias.
- To Use:
git brename new_branch_name
- Docs: branch -m
cm = commit -am
I hardly ever have unstaged files when I go to commit, so I have an alias that stages all of my files and allows me to write a message.
last = log -1 HEAD
I often forget what I’m doing and want to check the latest commit on the current branch.
- To Use:
git last
- Docs: -<number>
lg = log --oneline --no-merges
Before I submit a PR, I like to review the commit log to make sure it’s nice and tidy for my code reviewers, and I like to exclude merge commits because they’re generally just noise to me. This one will print commits in a single line, showing only the commit hash and the commit message. I use lg
so I know it’s a compact log.
- To Use:
git lg
- Docs: –oneline and –no-merges
diff-br = diff --shortstat develop..HEAD
Another thing I like to do before publishing a PR, is take a look at all of the things I’ve changed on my current branch.
- To Use:
git diff-br
- Docs: –shortstat
visual = !gitk
Sometimes, I’m need a visual of my git commit history, especially when there’s a lot of merging going on. This will pop open a repo browser with a pretty neat view of your branches.
- To Use:
git visual
- Docs: gitk
pull = pull --all --prune
oOOOooo 😍 this one is my absolute fave! I like to pull all of my branches down all the time. It keeps me from having to rebase later on if I switch branches. This also prunes any local branches that anyone deleted on remote.
NOTE: pull
will merge remote branches into your local one. You can also tack on --rebase
here to prevent gross merge commits in your commit log, or you can replace pull
with fetch
, which won’t merge.
push = push -u origin HEAD
I freakin’ hate when I create a new branch, and I go to push and I get the set upstream branch
error. So I added this in there so I never have to think about it again. Pairs well with the push.default
setting below.
- To Use:
git push
- Docs: -u
destroy = reset HEAD --hard
This alias gets the Miss Congeniality award. Often, I mess with a lot of files and then scrap the entire thing because I did it totally wrong. This will destroy revert all of my staged AND unstaged changes.
- To Use:
git destroy
- Docs: –hard
Settings
[user]
name = Giuliana Taylor
This is so that your GitHub author name isn’t your email. I think it presents more professionally. Docs
[pull]
rebase = true
I would like to give this git setting a standing ovation. I have a very strong preference for rebasing over merging, and this setting tells git to rebase anytime I pull. Docs
[rebase]
autoStash = true
I absolutely hate when git aborts my rebase because I have unstashed changes. This config stashes your changes, rebases, and then pops the stash automatically. Docs
[push]
default = current
This config also prevents the set upstream branch
error you get when pushing a new branch by auto-creating a remote branch with the same name. Docs
[diff]
tool = default-difftool
prompt = false
[difftool "default-difftool"]
cmd = code --wait --diff $LOCAL $REMOTE
prompt = false
Find you a diff tool you really like, and then set it here so you never have to see an ugly diff tool ever again. I personally like VSCode’s diff tool (more on this).
I also hate being prompted every time, so I’ve turned that off.
Docs
[merge]
tool = default-difftool
This is along the same lines, only you’re telling git which diff tool to use for merges. Docs
[core]
excludesfile = ~/.gitignore
You’ll want a personal .gitignore
file. This is where you should exclude IDE generated files. This tells git where your file is located. Docs