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
 |