199 lines
4.5 KiB
Bash
199 lines
4.5 KiB
Bash
# output current branch to STDOUT
|
|
function wgbranch {
|
|
cat ./.git/HEAD | perl -p -e 's/^ref:\srefs\/heads\/(.+)$/\1/g'
|
|
}
|
|
|
|
|
|
# edit git conflicts one-by-one
|
|
function vconflicts() {
|
|
$EDITOR $(git status --porcelain | awk '/^UU/ { print $2 }')
|
|
}
|
|
|
|
|
|
function git-tasks {
|
|
echo "fix - bug patching"
|
|
echo "refactor - changing structure; functionality remains unchanged"
|
|
echo "feat - introducing a new feature"
|
|
echo "style - updating UI / UX"
|
|
echo "chore - changing configuration, adding comments, etc"
|
|
echo "wip - placeholder tag signifying ongoing work"
|
|
echo "build - updating anything related to building and deploying"
|
|
echo "deps - updating related to project dependencies"
|
|
echo "docs - updating related to project documentation"
|
|
}
|
|
|
|
|
|
function git-discard {
|
|
option=$1
|
|
|
|
if [[ $option == '' ]]; then
|
|
echo "Please supply option: --staged, --unstaged, --untracked, or --all"
|
|
fi
|
|
|
|
if [[ $option == '--all' ]]; then
|
|
git-discard --staged && git-discard --unstaged && git-discard --untracked
|
|
fi
|
|
|
|
if [[ $option == '--staged' ]]; then
|
|
staged_files=$(git --no-pager diff --name-only --staged)
|
|
|
|
echo -n "Discarding staged..." &&
|
|
git reset HEAD $staged_files >/dev/null &&
|
|
echo "done."
|
|
fi
|
|
|
|
if [[ $option == '--unstaged' ]]; then
|
|
unstaged_files=$(git --no-pager diff --name-only)
|
|
|
|
echo -n "Discarding unstaged..." &&
|
|
git checkout -- $unstaged_files >/dev/null
|
|
echo "done."
|
|
fi
|
|
|
|
if [[ $option == '--untracked' ]]; then
|
|
untracked_files=$(git ls-files --others --exclude-standard)
|
|
|
|
echo -n "Discarding untracked..."
|
|
for file in $untracked_files; do
|
|
if [ -f $file ]; then
|
|
rm $file
|
|
else
|
|
rm -rf $file
|
|
fi
|
|
done
|
|
echo "done."
|
|
fi
|
|
}
|
|
|
|
|
|
function wgd {
|
|
input=$1
|
|
git diff "./**/*/${input}*"
|
|
}
|
|
|
|
|
|
function wga {
|
|
input=$1
|
|
git add "./**/*/${input}*"
|
|
}
|
|
|
|
|
|
# Outputs staged, unstaged, untracked files
|
|
# Similar to `git status` output but without the cruft
|
|
function wg-git-changed-files {
|
|
tracked_staged=$(wg-diff-tracked-staged)
|
|
tracked_unstaged=$(wg-diff-tracked-unstaged)
|
|
untracked_unstaged=$(wg-diff-untracked-unstaged)
|
|
|
|
echo "${tracked_staged}\n${tracked_unstaged}\n${untracked_unstaged}"
|
|
}
|
|
|
|
function wg-diff-tracked-staged {
|
|
git --no-pager diff --name-only --staged
|
|
}
|
|
|
|
function wg-diff-tracked-unstaged {
|
|
git --no-pager diff --name-only
|
|
}
|
|
|
|
function wg-diff-untracked-unstaged {
|
|
git ls-files --others --exclude-standard
|
|
}
|
|
|
|
|
|
# git status "plumbing" version
|
|
# Useful for piping into grep -> xargs git add
|
|
function wgst {
|
|
git status -s | awk '{ print $2 }'
|
|
}
|
|
|
|
|
|
# git add by file regex pattern
|
|
function wgadd {
|
|
pattern="$2"
|
|
|
|
wgst | grep "${pattern}" | xargs git add
|
|
}
|
|
|
|
|
|
# compare file with another branch
|
|
function wgcompare_file {
|
|
file_path="$1"
|
|
compare_branch_a="master"
|
|
compare_branch_b="$(wgbranch)"
|
|
|
|
git diff "${compare_branch_a}:${file_path}" "${compare_branch_b}:${file_path}"
|
|
}
|
|
|
|
|
|
# output the stash ticket number to STDOUT
|
|
function wgtix {
|
|
wgbranch | perl -p -e 's/(?:feature|bugfix|refactor)\/(\w+-\d+).+$/\1/'
|
|
}
|
|
|
|
|
|
# search for a git branch by ticket number
|
|
# useful when combined with `wgcheckout`
|
|
# e.g.
|
|
# $ wgcheckout "$(wgfind 1045)"
|
|
# checks-out feature/GDMX-1045 ...
|
|
#
|
|
# if the `TICKET_NO` cannot be found, it will return the current branch
|
|
function wgfind {
|
|
TICKET_NO="$1"
|
|
|
|
BRANCHNAME=$(git branch | grep "$TICKET_NO" | perl -p -e 's/^\s*//')
|
|
|
|
if [ -z $BRANCHNAME ]; then
|
|
BRANCHNAME="$(wgbranch)"
|
|
fi
|
|
|
|
echo "$BRANCHNAME"
|
|
}
|
|
|
|
|
|
# wrapper fn for "git checkout" that exports previous branch to env
|
|
function wgcheckout {
|
|
if [ -z $1 ]; then
|
|
branchname="develop"
|
|
else
|
|
branchname="$1"
|
|
fi
|
|
|
|
echo " -- wgcheckout -- "
|
|
echo "Storing branch \"$(wgbranch)\" in WGPREV ..."
|
|
export WGPREV="$(wgbranch)"
|
|
echo "Checking out \"$branchname\" ..."
|
|
echo
|
|
echo " -- git checkout -- "
|
|
git checkout "$branchname"
|
|
echo
|
|
}
|
|
|
|
|
|
# opens the current ticket-branch in web browser
|
|
function wgjira {
|
|
base_url="https://jira.hugeinc.com/browse"
|
|
ticket=$(wgtix)
|
|
|
|
open "${base_url}/${ticket}"
|
|
}
|
|
|
|
|
|
# wgcheckout combined with a fuzzy search
|
|
function wgfcheckout {
|
|
branchname=$(trim $(git branch | fzf-tmux))
|
|
|
|
[ ! -z "$branchname" ] && wgcheckout "$branchname" || return
|
|
}
|
|
|
|
|
|
# View an author's work within a specified date range.
|
|
function wgviewcommits {
|
|
author=$([ -z "$1" ] && echo "William Carroll" || echo "$1")
|
|
todays_date=$(date +'%Y-%m-%d')
|
|
date=$([ -z "$2" ] && echo "${todays_date}" || echo "$2")
|
|
|
|
git log --all --author="${author}" --after="${date} 00:00" \
|
|
--before="${date} 23:59"
|
|
}
|