Last active
March 3, 2023 07:57
-
-
Save agargiulo/6211380390050f0df087381522e900bb to your computer and use it in GitHub Desktop.
my git config, more or less
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[user] | |
name = Person Name | |
email = [email protected] | |
# I love Vim. Vimdiff is amazing. This combined with `merge.conflictstyle = diff3` | |
# makes for fun 4 pane vim sessions that make merge headaches almost all go away | |
[diff] | |
tool = vimdiff | |
compactionHeuristic = true | |
[alias] | |
# This may or may not work, I can't remember. | |
shorten ="!sh -c 'curl -i https://git.io -F url=$1' -" | |
# REALLY AMAZING LOOKING git log. Colorful, with a graph, and decorated commits (Shows branch and remote/branch headers on commits that are branch HEADs) | |
lol = log --graph --pretty=format:'%C(auto)%h %C(white)(%p) - %C(yellow)[%C(magenta bold)%aN%C(reset)%C(yellow)]%C(reset)%C(auto) -%d %s %C(yellow)( C: %C(green)%cd %C(yellow)A: %C(green)%ad%C(yellow no-bold))%C(reset)' --abbrev-commit --date=auto:human --color | |
# Same as above but shows gpg signatures on commits | |
lols = !git lol --show-signature | |
# Similar to `git lol` but it shows all branches, not just the current branch. Sometimes very useful for dealing with merges and PRs | |
lola = !git lol --all | |
# lolas : lola :: lols : lol | |
lolas = !git lola --show-signature | |
lolsa = !git lols --all | |
# Fun stuff with the reflog because I need to find lost commits from time to time | |
lrl = log --reflog --pretty=format:'%C(auto)%h - %C(yellow)[%C(magenta bold)%aN%C(reset)%C(yellow)]%C(reset)%C(auto) -%d %s %C(yellow)( C: %C(green)%cd %C(yellow)A: %C(green)%ad%C(yellow no-bold))%C(reset)' --abbrev-commit --date=relative --color --graph | |
# Pass this a commit range (origin/master...HEAD) to see commits different between them | |
l2r = log --left-right --graph --cherry-pick --oneline | |
# Based on this SO answer: https://stackoverflow.com/a/25777221 | |
ltag = log --pretty=format:'%C(auto)%h (%p) - %C(yellow)[%C(magenta bold)%aN%C(reset)%C(yellow)]%C(reset)%C(auto) -%d %s %C(yellow)( C: %C(green)%cd %C(yellow)A: %C(green)%ad%C(yellow no-bold))%C(reset)' --abbrev-commit --date=relative --color --tags --no-walk | |
# These are just shorthands since I got lazy and such. | |
st = status | |
sh = show | |
cb = rev-parse --abbrev-ref | |
co = checkout | |
sw = switch | |
d = diff | |
dc = diff --cached | |
dcc = diff --color --cached | |
rem = remote | |
up = fetch --all --prune --prune-tags | |
# This will show you where the root of the git repo lives. Useful for things like: | |
# cd `git root` | |
root = rev-parse --show-toplevel | |
# SHA of the root commit. Useful: `git rc | git name-rev --stdin` | |
rc = rev-list --max-parents=0 HEAD | |
gitdir = rev-parse --git-dir | |
# Get the short sha of a commit (HEAD?) | |
short = rev-parse --short=8 | |
# Used when signing commits. Same as `git commit --gpg-sign[=<keyid>]` | |
commits = commit -S | |
# Stands for "sign last", so `git sl` will ammed the last commit with a gpg signature. | |
sl = commit --amend -C HEAD -S | |
# Ammend last: rewrite the HEAD commit with whatever changes you made with git add/rm/etc | |
# Keep in mind, using this or the sl alias will change history, | |
# so `git push --foce ...` is needed if you've already pushed before running this command | |
aml = commit --amend -C HEAD | |
ic = commit --allow-empty -m 'root commit' | |
assume = update-index --assume-unchanged | |
# undo above hack (If you need to actually update the file | |
unassume = update-index --no-assume-unchanged | |
# List files that git thinks will not change | |
assumed = "!git ls-files -v | grep ^h | cut -c 3-" | |
# generate commit graph in dot format | |
# ex: git graphviz HEAD~50..HEAD | dot -o head_50.png -Tpng | |
graphviz = "!f() { echo 'digraph git {' ; git log --pretty='format: %h -> { %p }' \"$@\" | sed 's/[0-9a-f][0-9a-f]*/\"&\"/g' ; echo '}'; }; f" | |
# Count of all the commits in the repo | |
count = rev-list --count --all | |
# git reset HEAD --hard # UNDO | |
unreset = fsck --lost-found | |
tags = tag -l --sort=v:refname | |
cisk = push --push-option=ci.skip | |
# Basically makes the colors for git diff and status and branch look a ton better than the defaults | |
# These are the recommended colors from `diff-so-fancy --colors` | |
[color] | |
ui = true | |
[color "branch"] | |
current = green | |
local = yellow | |
remote = red | |
[color "diff"] | |
meta = 227 | |
frag = magenta bold | |
old = red bold | |
new = green bold | |
commit = 227 bold | |
whitespace = red reverse | |
[color "status"] | |
added = green | |
changed = yellow | |
untracked = red | |
[color "diff-highlight"] | |
oldNormal = red bold | |
oldHighlight = red bold 52 | |
newNormal = green bold | |
newHighlight = green bold 22 | |
# This sets a global excludes file. | |
# Useful for ignoring editor files instead of cluttering individual repo gitignores with that crap | |
[core] | |
pager = delta | |
excludesfile = ~/.gitignore | |
[delta] | |
plus-color = "#012800" | |
minus-color = "#340001" | |
syntax-theme = OneHalfDark | |
[interactive] | |
diffFilter = delta --color-only | |
# current - push the current branch to update a branch with the same name on the receiving end. | |
# Works in both central and non-central workflows. | |
# See the push.default section of https://git-scm.com/docs/git-config.html for other choices here | |
[push] | |
default = current | |
# This is useful for caching creds for http/https remotes. So you don't have to type it every time | |
# but also don't have to save them in the plaintext .git/config files | |
[credential] | |
helper = cache | |
# This adds a "merged common ancestors" section to merge conflicts | |
# This is super nice since it shows you how each side of the merge changed, | |
# so resolving merges is easier. | |
# http://psung.blogspot.com/2011/02/reducing-merge-headaches-git-meets.html | |
[merge] | |
conflictstyle = diff3 | |
# Use this to automatically rebase when you make a commit BEFORE you run `git pull..` | |
# so that you don't have a ton of merge commits when you commit then pull | |
# You also need to add `rebase = true` to the [branch "some_branch"] section in .git/config | |
# of each repo for whatever branch (This setting will add that for you for new repos I believe | |
[branch] | |
autosetuprebase = always | |
# Show patch(es) to be committed when editor is opened for commit message. | |
# Change to 2 (from true?) to also show unadded changes after the staged changes | |
# https://git-scm.com/docs/git-commit#git-commit--v | |
[commit] | |
verbose = true | |
# vim : set ft=gitconfig noet : |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment