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.
76 lines
1.6 KiB
76 lines
1.6 KiB
8 years ago
|
#!/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
|