Skip to content

Instantly share code, notes, and snippets.

@tayvano
Created November 10, 2017 11:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tayvano/ac311d2281c170272425b8a3b02bf782 to your computer and use it in GitHub Desktop.
Save tayvano/ac311d2281c170272425b8a3b02bf782 to your computer and use it in GitHub Desktop.
[user]
name = tayvano
email =
[core]
excludesfile = ~/.gitignore # Use custom `.gitignore` and `.gitattributes`
attributesfile = ~/.gitattributes # Use custom `.gitignore` and `.gitattributes`
trustctime = false # Make `git rebase` safer on macOS More info: <http://www.git-tower.com/blog/make-git-rebase-safe-on-osx/>
precomposeunicode = false # Prevent showing files whose names contain non-ASCII symbols as unversioned. http://michael-kuehnel.de/git/2014/11/21/git-mac-osx-and-german-umlaute.html
untrackedCache = true # Speed up commands involving untracked files such as `git status`. https://git-scm.com/docs/git-update-index#_untracked_cache
# I don't use this but you can
# Treat spaces before tabs and all kinds of trailing whitespace as an error
# [default] trailing-space: looks for spaces at the end of a line | space-before-tab: looks for spaces before tabs at the beginning of a line
# whitespace = space-before-tab,-indent-with-non-tab,trailing-space
[apply]
whitespace = fix # Detect whitespace errors when applying a patch
[commit]
template = ~/.stCommitMsg
# gpgsign = true # https://help.github.com/articles/signing-commits-using-gpg/
[diff "bin"]
textconv = hexdump -v -C # Use `hexdump` to diff binary files
[merge]
log = true # Include summaries of merged commits in newly created merge commit messages
[help]
autocorrect = 1 # Automatically correct and execute mistyped commands
[push]
default = simple # https://git-scm.com/docs/git-config#git-config-pushdefault
followTags = true # Make `git push` push relevant annotated tags when pushing branches out.
# I use https://github.com/twolfson/sexy-bash-prompt instead
# [color]
# ui = auto # Use colors in Git commands that are capable of colored output when
#
# [color "branch"]
# current = yellow reverse
# local = yellow
# remote = green
#
# [color "diff"]
# meta = yellow bold
# frag = magenta bold # line info
# old = red # deletions
# new = green # additions
#
# [color "status"]
# added = yellow
# changed = green
# untracked = cyan
# URL shorthands
[url "git@github.com:"]
insteadOf = "gh:"
pushInsteadOf = "github:"
pushInsteadOf = "git://github.com/"
[url "git://github.com/"]
insteadOf = "github:"
[url "git@gist.github.com:"]
insteadOf = "gst:"
pushInsteadOf = "gist:"
pushInsteadOf = "git://gist.github.com/"
[url "git://gist.github.com/"]
insteadOf = "gist:"
[alias]
# View abbreviated SHA, description, and history graph of the latest 20 commits
l = log --pretty=oneline -n 20 --graph --abbrev-commit
# View the current working tree status using the short format
s = status -s
# Show the diff between the latest commit and the current state
d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat"
# `git di $number` shows the diff between the state `$number` revisions ago and the current state
di = !"d() { git diff --patch-with-stat HEAD~$1; }; git diff-index --quiet HEAD -- || clear; d"
# Pull in remote changes for the current repository and all its submodules
p = !"git pull; git submodule foreach git pull origin master"
# Clone a repository including all submodules
c = clone --recursive
# Commit all changes
ca = !git add -A && git commit -av
# Switch to a branch, creating it if necessary
go = "!f() { git checkout -b \"$1\" 2> /dev/null || git checkout \"$1\"; }; f"
# Show verbose output about tags, branches or remotes
tags = tag -l
branches = branch -a
remotes = remote -v
# List aliases
aliases = config --get-regexp alias
# Amend the currently staged files to the latest commit
amend = commit --amend --reuse-message=HEAD
# Credit an author on the latest commit
credit = "!f() { git commit --amend --author \"$1 <$2>\" -C HEAD; }; f"
# Interactive rebase with the given number of latest commits
reb = "!r() { git rebase -i HEAD~$1; }; r"
# Remove the old tag with this name and tag the latest commit with it.
retag = "!r() { git tag -d $1 && git push origin :refs/tags/$1 && git tag $1; }; r"
# Find branches containing commit
fb = "!f() { git branch -a --contains $1; }; f"
# Find tags containing commit
ft = "!f() { git describe --always --contains $1; }; f"
# Find commits by source code
fc = "!f() { git log --pretty=format:'%C(yellow)%h %Cblue%ad %Creset%s%Cgreen [%cn] %Cred%d' --decorate --date=short -S$1; }; f"
# Find commits by commit message
fm = "!f() { git log --pretty=format:'%C(yellow)%h %Cblue%ad %Creset%s%Cgreen [%cn] %Cred%d' --decorate --date=short --grep=$1; }; f"
# Remove branches that have already been merged with master
# a.k.a. ‘delete merged’
dm = "!git branch --merged | grep -v '\\*' | xargs -n 1 git branch -d"
# List contributors with number of commits
contributors = shortlog --summary --numbered
# Merge GitHub pull request on top of the current branch or,
# if a branch name is specified, on top of the specified branch
mpr = "!f() { \
declare currentBranch=\"$(git symbolic-ref --short HEAD)\"; \
declare branch=\"${2:-$currentBranch}\"; \
if [ $(printf \"%s\" \"$1\" | grep '^[0-9]\\+$' > /dev/null; printf $?) -eq 0 ]; then \
git fetch origin refs/pull/$1/head:pr/$1 && \
git checkout -B $branch && \
git rebase $branch pr/$1 && \
git checkout -B $branch && \
git merge pr/$1 && \
git branch -D pr/$1 && \
git commit --amend -m \"$(git log -1 --pretty=%B)\n\nCloses #$1.\"; \
fi \
}; f"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment