#!/bin/bash # @see # https://cutt.ly/git-aliases # @see # https://git-scm.com/docs/pretty-formats # Default Integration Branch: main. # If you use another integration branch, just replace # the "-main" name by the branch name you are using. git config --global alias.co 'checkout' git config --global alias.cp 'cherry-pick' git config --global alias.st 'status -s' git config --global alias.untrack '!git update-index --assume-unchanged' git config --global alias.track '!git update-index --no-assume-unchanged' git config --global alias.logn '!f() { n=${1:-10}; git log --graph --abbrev-commit --decorate --date=short --format=format:"%C(blue)%h%Creset %C(green)(%ad)%Creset %s %C(red)%an%Creset%C(yellow)%d%Creset" -$n; }; f' git config --global alias.logauthor '!f() { a="$1"; b="$2"; shift 2; git log --date=short --pretty="format:%C(green)%ad%Creset %C(yellow)%h%Creset %C(white)%s%Creset" --author=$a --since=$b $@; }; f' git config --global alias.currentbr '!f() { git branch | grep \* | cut -d " " -f2; }; f' git config --global alias.remotebr '!f() { br=${1-main}; git branch --remote | cut -c10- | grep -vE "HEAD$|master$|${br}$"; }; f' git config --global alias.syncbr '!git remote update origin --prune && echo -e "\e[36mRemote branches..." && git remotebr' git config --global alias.newbr '!git pullbr && git checkout -b' git config --global alias.rmbr '!f() { git branch -D $1 2>/dev/null; git push origin --delete $1 2>/dev/null; }; f' git config --global alias.commitall '!git add -A && git commit -a -m' git config --global alias.amend '!git add -A && git commit -a --amend --no-edit' git config --global alias.pushf '!f() { git currentbr | xargs git push --force-with-lease origin; }; f' git config --global alias.pullbr '!f() { br=$(git currentbr); git pull origin ${br} --rebase; }; f' git config --global alias.resetbr '!f() { br=${1-main}; git checkout ${br} && git fetch origin ${br} && git reset --hard origin/${br}; }; f' git config --global alias.rebaseii '!f() { git rebase -i HEAD~$1; }; f' git config --global alias.rebaseonto '!f() { git rebase --onto $1 $2 $(git currentbr); }; f' git config --global alias.rebasebr '!f() { br=${1-main}; git fetch origin ${br} && git rebase origin/${br}; }; f' git config --global alias.mergebr '!f() { br=${2-main}; git checkout ${br} && git pullbr && git merge $1 && printf "\nPushing to origin ${br} ...\n"; git push origin ${br}; }; f' git config --global alias.mergeto '!f() { br=$(git currentbr); git resetbr $1 && printf "\nMerging branch ${br} into $1 ...\n"; git mergebr ${br} $1 && git rmbr ${br}; }; f' git config --global alias.cleanmerged '!f() { br=${1-main}; git resetbr ${br} && git branch --remote --merged ${br} | cut -c10- | grep -vE "HEAD$|master$|${br}$" | xargs git rmbr; }; f' echo; echo "@git: all aliases registered!" echo "@see: https://cutt.ly/git-aliases"