75 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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
 |