Here are a couple git command aliases I’ve added to my .gitconfig file which may be generally useful. If you combine with Git auto-complete, these will be included as well.
Quick overview:
- find-merge / show-merge – used to help trace problematic merges / conflicts (credit: Stack overflow thread on tracing merges)
- pull-all – pulls and fast-forwards all local branches that can be fast-forwarded. Keeps me from accidentally making a local commit over some remote change.
- tags-recent – by default git tag –list lists ALL tags in chronological order, which is pretty painful; this shows you only the most recent 10.
To make these available, add the following block to the .gitconfig file in your home directory.
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
[alias] | |
# find when commits were merged | |
# USAGE: | |
# git find-merge <SHA-1> // when merged to current branch | |
# git find-merge <SHA-1> master // when merged to master | |
find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch –ancestry-path | cat -n; git rev-list $commit..$branch –first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'" | |
show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'" | |
# pull and fast-forward ALL local branches | |
pull-all = !"for b in $(git for-each-ref refs/heads –format='%(refname)') ; do git checkout ${b#refs/heads/} ; git pull –ff-only ; done" | |
# list 10 most recent tags | |
tags-recent = !"git tag –list –sort=-refname |head -n 10" |