You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.6 KiB
75 lines
1.6 KiB
#!/usr/bin/bash |
|
|
|
function help() { |
|
cat <<HELP |
|
Git Clean |
|
https://jonathanh.co.uk |
|
|
|
Some code came from Ben Alman |
|
http://benalman.com/ |
|
|
|
|
|
Usage: $(basename "$0") [command] |
|
|
|
Commands: |
|
clean Remove current unstaged changes/untracked files** |
|
cleanall Remove all saved tags, unstaged changes and untracked files** |
|
|
|
** This action is destructive and cannot be undone! |
|
|
|
Description: |
|
Cleans unstaged changes and untracked files |
|
|
|
Copyright (c) 2014 "Cowboy" Ben Alman |
|
Licensed under the MIT license. |
|
http://benalman.com/about/license/ |
|
HELP |
|
} |
|
|
|
function usage() { |
|
echo "Usage: $(basename "$0") [clean | cleanall]" |
|
} |
|
|
|
function git_head_sha() { |
|
git rev-parse --short HEAD |
|
} |
|
|
|
# Get absolute path to root of Git repo |
|
function git_repo_toplevel() { |
|
git rev-parse --show-toplevel |
|
} |
|
|
|
# Clean (permanently) current changes and remove the current saved tag |
|
function clean() { |
|
local head_sha=$(git_head_sha) |
|
git tag -d "git-jump-$head_sha" &>/dev/null |
|
if [[ $? == 0 ]]; then |
|
echo "Removed stored data for commit $head_sha." |
|
fi |
|
local repo_root="$(git_repo_toplevel)" |
|
git reset HEAD "$repo_root" >/dev/null |
|
git clean -f -d -q -- "$repo_root" >/dev/null |
|
git checkout -- "$repo_root" >/dev/null |
|
echo "Unstaged changes and untracked files removed." |
|
} |
|
|
|
# Remove (permanently) all saved tags |
|
function clean_all_tags() { |
|
git for-each-ref refs/tags --format='%(refname:short)' | \ |
|
while read tag; do |
|
if [[ "$tag" =~ ^git-jump- ]]; then |
|
git tag -d "$tag" |
|
fi |
|
done |
|
} |
|
|
|
# Handle CLI arguments |
|
if [[ "$1" == "clean" ]]; then |
|
clean |
|
elif [[ "$1" == "cleanall" ]]; then |
|
clean_all_tags |
|
clean |
|
else |
|
usage |
|
exit 1 |
|
fi
|
|
|