git
I use git quite a lot and despite the good documentation, it's nice to have some things at hand
Posted March 18, 2021 by Adrian Wyssmann
This page lists a collection of interesting git commands
Resources
Some good resources
- Flight rules for git
- GIT utilities – repo summary, repl, changelog population, author commit percentages and more
Commands
Purpose | Command |
---|---|
Reset to a specific commit-hash |
git reset --hard <commit-hash> git push -f origin master |
Reset to inital commit | git update-ref -d HEAD |
Reset local branch to status from remote | git reset --hard <remote>/<branch> |
Check out the fb branch, and rebase from master | git checkout fb git rebase master |
Branches: delete a local branch1 | git branch -d BRANCH_NAME |
Branches: delete a remote branch1 | git push --delete origin BRANCH_NAME |
Branches: delete all branches on remote that are already merged1 | git branch –merged | egrep -v “(^*|master|dev)” | xargs git branch -d |
Tags: tag a commit | git tag -a <tag> <commit> -m "<commit message>" |
Tags: delete a tag on remote | git push --delete origin [TAGNAME] |
Tags: delete a tag locally | git tag -d [TAGNAME] |
Change author of a commit | git commit --amend --author="Author Name <[email protected]>" |
The GPG key used for signing your commits | git config --global user.signingkey 0A46826A |
Sign new tags | git tag -s v1.5 -m 'my signed 1.5 tag' |
Sign a commit | git commit -a -S -m 'Signed commit' |
check any signatures it finds and list them in its output | git log --pretty="format:%h %G? %aN %s" |
Defined the key to use for signing commits | git config user.signingkey [KEYID] |
Set signing of commits globally | git config --global commit.gpgsign true |
Useful One-liners
GET-DATE -Format o | Out-File .\README.md; git add .\README.md; git commit -m "Test"; git push
Remove credentials from git
https://stackoverflow.com/questions/15381198/remove-credentials-from-git
git config --global --unset credential.helper
git config --system --unset credential.helper
git config --global credential.helper manager
My .gitconfig
Below my .gitconfig
:
[core]
editor = vi
whitespace = fix,-indent-with-non-tab,trailing-space,cr-at-eol
excludesfile = ~/.gitignore
autocrlf = input
[web]
browser = firefox
[diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = code-insiders --wait --diff $LOCAL $REMOTE
[alias]
fixup = !sh -c 'REV=$(git rev-parse $1) && git commit --fixup [email protected]' -
fixauto = !sh -c 'REV=$(git rev-parse $1) && git commit --fixup [email protected] && git rebase -i --autosquash $REV^' -
squash = !sh -c 'REV=$(git rev-parse $1) && git commit --squash [email protected]' -
squauto = !sh -c 'REV=$(git rev-parse $1) && git commit --squash [email protected] && git rebase -i --autosquash $REV^' -
# 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 --recurse-submodules
# 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"
# Show the user email for the current repository.
whoami = config user.email
[commit]
gpgsign = true
[user]
name = papanito
email = [email protected]
signkey = [email protected]