Skip to content

Instantly share code, notes, and snippets.

@pksunkara
Last active November 21, 2024 21:13
Show Gist options
  • Save pksunkara/988716 to your computer and use it in GitHub Desktop.
Save pksunkara/988716 to your computer and use it in GitHub Desktop.
Sample of git config file (Example .gitconfig) (Place them in $XDG_CONFIG_HOME/git)
[user]
name = Pavan Kumar Sunkara
email = pavan.sss1991@gmail.com
username = pksunkara
[init]
defaultBranch = master
[core]
editor = nvim
whitespace = fix,-indent-with-non-tab,trailing-space,cr-at-eol
pager = delta
[sendemail]
smtpencryption = tls
smtpserver = smtp.gmail.com
smtpuser = pavan.sss1991@gmail.com
smtppass = password
smtpserverport = 587
[web]
browser = google-chrome
[instaweb]
httpd = apache2 -f
[rerere]
enabled = 1
autoupdate = 1
[color]
ui = auto
[color "branch"]
current = yellow bold
local = green bold
remote = cyan bold
[color "diff"]
meta = yellow bold
frag = magenta bold
old = red bold
new = green bold
whitespace = red reverse
[color "status"]
added = green bold
changed = yellow bold
untracked = red bold
[diff]
tool = vimdiff
[difftool]
prompt = false
[delta]
features = line-numbers decorations
line-numbers = true
[delta "decorations"]
minus-style = red bold normal
plus-style = green bold normal
minus-emph-style = white bold red
minus-non-emph-style = red bold normal
plus-emph-style = white bold green
plus-non-emph-style = green bold normal
file-style = yellow bold none
file-decoration-style = yellow box
hunk-header-style = magenta bold
hunk-header-decoration-style = magenta box
minus-empty-line-marker-style = normal normal
plus-empty-line-marker-style = normal normal
line-numbers-right-format = "{np:^4}│ "
[trim]
bases = master,main
protected = *production
[github]
user = pksunkara
token = token
[sequence]
editor = interactive-rebase-tool
[alias]
a = add --all
ai = add -i
#############
ap = apply
as = apply --stat
ac = apply --check
#############
ama = am --abort
amr = am --resolved
ams = am --skip
#############
b = branch
ba = branch -a
bd = branch -d
bdd = branch -D
br = branch -r
bc = rev-parse --abbrev-ref HEAD
bu = !git rev-parse --abbrev-ref --symbolic-full-name "@{u}"
bs = !git-branch-status
#############
c = commit
ca = commit -a
cm = commit -m
cam = commit -am
cem = commit --allow-empty -m
cd = commit --amend
cad = commit -a --amend
ced = commit --allow-empty --amend
#############
cl = clone
cld = clone --depth 1
clg = !sh -c 'git clone https://github.com/$1 $(basename $1)' -
clgp = !sh -c 'git clone git@github.com:$1 $(basename $1)' -
clgu = !sh -c 'git clone git@github.com:$(git config --get user.username)/$1 $1' -
#############
cp = cherry-pick
cpa = cherry-pick --abort
cpc = cherry-pick --continue
#############
d = diff
dp = diff --patience
dc = diff --cached
dk = diff --check
dck = diff --cached --check
dt = difftool
dct = difftool --cached
#############
f = fetch
fo = fetch origin
fu = fetch upstream
#############
fp = format-patch
#############
fk = fsck
#############
g = grep -p
#############
l = log --oneline
lg = log --oneline --graph --decorate
#############
ls = ls-files
lsf = !git ls-files | grep -i
#############
m = merge
ma = merge --abort
mc = merge --continue
ms = merge --skip
#############
o = checkout
om = checkout master
ob = checkout -b
#############
pr = prune -v
#############
ps = push
psf = push -f
psu = push -u
pst = push --tags
#############
pso = push origin
psao = push --all origin
psfo = push -f origin
psuo = push -u origin
#############
psom = push origin master
psaom = push --all origin master
psfom = push -f origin master
psuom = push -u origin master
psoc = !git push origin $(git bc)
psaoc = !git push --all origin $(git bc)
psfoc = !git push -f origin $(git bc)
psuoc = !git push -u origin $(git bc)
psdc = !git push origin :$(git bc)
#############
pl = pull
pb = pull --rebase
#############
plo = pull origin
pbo = pull --rebase origin
plom = pull origin master
ploc = !git pull origin $(git bc)
pbom = pull --rebase origin master
pboc = !git pull --rebase origin $(git bc)
#############
plu = pull upstream
plum = pull upstream master
pluc = !git pull upstream $(git bc)
pbum = pull --rebase upstream master
pbuc = !git pull --rebase upstream $(git bc)
#############
rb = rebase
rba = rebase --abort
rbc = rebase --continue
rbi = rebase --interactive
rbs = rebase --skip
#############
re = reset
rh = reset HEAD
reh = reset --hard
rem = reset --mixed
res = reset --soft
rehh = reset --hard HEAD
remh = reset --mixed HEAD
resh = reset --soft HEAD
rehom = reset --hard origin/master
#############
r = remote
ra = remote add
rr = remote rm
rv = remote -v
rn = remote rename
rp = remote prune
rs = remote show
rao = remote add origin
rau = remote add upstream
rro = remote remove origin
rru = remote remove upstream
rso = remote show origin
rsu = remote show upstream
rpo = remote prune origin
rpu = remote prune upstream
#############
rmf = rm -f
rmrf = rm -r -f
#############
s = status
sb = status -s -b
#############
sa = stash apply
sc = stash clear
sd = stash drop
sl = stash list
sp = stash pop
ss = stash save
ssk = stash save -k
sw = stash show
st = !git stash list | wc -l 2>/dev/null | grep -oEi '[0-9][0-9]*'
#############
t = tag
td = tag -d
#############
w = show
wp = show -p
wr = show -p --no-color
#############
svnr = svn rebase
svnd = svn dcommit
svnl = svn log --oneline --show-commit
#############
subadd = !sh -c 'git submodule add https://github.com/$1 $2/$(basename $1)' -
subrm = !sh -c 'git submodule deinit -f -- $1 && rm -rf .git/modules/$1 && git rm -f $1' -
subup = submodule update --init --recursive
subpull = submodule foreach 'git pull --tags -f origin master || git pull --tags -f origin main || git pull --tags -f origin development'
#############
assume = update-index --assume-unchanged
unassume = update-index --no-assume-unchanged
assumed = !git ls -v | grep ^h | cut -c 3-
unassumeall = !git assumed | xargs git unassume
assumeall = !git status -s | awk {'print $2'} | xargs git assume
#############
bump = !sh -c 'git commit -am \"Version bump v$1\" && git psuoc && git release $1' -
release = !sh -c 'git tag v$1 && git pst' -
unrelease = !sh -c 'git tag -d v$1 && git pso :v$1' -
merged = !sh -c 'git o master && git plom && git bd $1 && git rpo' -
aliases = !git config -l | grep alias | cut -c 7-
snap = !git stash save 'snapshot: $(date)' && git stash apply 'stash@{0}'
bare = !sh -c 'git symbolic-ref HEAD refs/heads/$1 && git rm --cached -r . && git clean -xfd' -
whois = !sh -c 'git log -i -1 --author=\"$1\" --pretty=\"format:%an <%ae>\"' -
serve = daemon --reuseaddr --verbose --base-path=. --export-all ./.git
#############
behind = !git rev-list --left-only --count $(git bu)...HEAD
ahead = !git rev-list --right-only --count $(git bu)...HEAD
#############
ours = "!f() { git checkout --ours $@ && git add $@; }; f"
theirs = "!f() { git checkout --theirs $@ && git add $@; }; f"
subrepo = !sh -c 'git filter-branch --prune-empty --subdirectory-filter $1 master' -
human = name-rev --name-only --refs=refs/heads/*
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Temporary files #
###################
*.swp
*.swo
*~
# Packages #
############
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs #
######################
*.log
# OS generated files #
######################
.DS_Store*
ehthumbs.db
Icon?
Thumbs.db
# Editor files #
################
.vscode
@emb03
Copy link

emb03 commented Sep 27, 2018

Is there a way to specify two different .gitignore files in the gitconfig file?
Something like this:
[remote "origin"]
.gitignore = .gitignore-origin
[remote "ac"]
.gitignore = .gitignore-ac

@jmarsac
Copy link

jmarsac commented Sep 28, 2018

@Zooloo2014

[credential "https://github.com"]
        username = scott18

to define username for github.com only

@redeemefy
Copy link

I'm trying to find the full list of options I can use inside the .gitconfig file. Where I can find those?

@awesometic
Copy link

Thanks, this is great!

@upendrak
Copy link

Thanks!

Another alternative for .gitignore files: https://www.gitignore.io/

Thanks. Very useful

@ilev4ik
Copy link

ilev4ik commented Nov 22, 2019

Great!

@oouxx
Copy link

oouxx commented Feb 7, 2020

thx!

@dominusceo
Copy link

Thanks !

@ajayvaineela
Copy link

Thanks a lot man....

@kethan1
Copy link

kethan1 commented Oct 8, 2020

super useful 👍

@andyrufasto
Copy link

[user]
signingkey = 0A3D7C5B8C2499A8BEBCE72869D2E5C413569DA2

To sign commits with yout GPG key.

gpg --list-secret-keys and copy

To sign your commit:
git commit -S -m "signed commit"

@kevthanewversi
Copy link

thank you mucho

@rescenic
Copy link

rescenic commented May 5, 2021

Add rebase tool, download here: https://github.com/MitMaro/git-interactive-rebase-tool
Place it in .git folder in User Profile folder.
Edit .gitconfig, if using Git Bash in Windows:

[sequence]
	editor = "winpty /c/Users/{Username}/.git/interactive-rebase-tool.exe"

@GitarPlayer
Copy link

Very useful! Thanks. You don't have a [credential] section. Do you know how that would be used?

I found it:

[credential]
	helper = cache

# same as above, but pass an argument to the helper
[credential]
	helper = "cache --timeout=3600"

Important you need both stanzas for it to work.

@AdarshGaur
Copy link

this is nice. Thanks

@RaulCPena
Copy link

Very helpful

@felipealfonsog
Copy link

felipealfonsog commented Dec 30, 2021

oh, man! this saved my day!
These two specifications!

# This is Git's per-user configuration file.
[user]
# Please adapt and uncomment the following lines:
#       name = user
#       email = user@SDF-1
[user]
        name = user name
        email = user@SDF-1
        signingkey = 584xxxxxxx4C7sdfs df sdfsfsdf dsx

[github]
        user = user
        token = dfgh dfgh fdh455 w45tw gdfgfs g

[credential]
        helper = cache

# same as above, but pass an argument to the helper
[credential]
        helper = "cache --timeout=3600"

@jun-uen0
Copy link

I just regret that I didn't know this repo.
This is incredible, thanks a lot!

@killshot13
Copy link

Thanks! Also, if you know, what kind of format is this? I've seen it around (e.g. .aws/config file for aws cli) but I haven't come across the name for it.

According to the documentation, there is no specific "standard" .gitconfig format. It's just a list defined by brackets and indents that Git expects to see. The closest related filetype would be a .ini file. Although similar, they still have distinct qualities that define the difference, especially in the subsections and when using values with quotations.

.gitconfig files are not difficult to edit; simply remember 1.) Sections & comments are never indented. 2.) All other lines are evenly indented (anything between 2 and 6 spaces is okay in my experience); the important point is to make them all the same width. If you prefer, use sed or awk on the Unix/Linux command line to make edits more effectively.

@sharkbruhaha
Copy link

thanks for this!

@denisrasulev
Copy link

I'm trying to find the full list of options I can use inside the .gitconfig file. Where I can find those?

This can be a good start: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment