#!/bin/bash function is_git { # check if current folder is git repository git_check_command=$(git -C $1 rev-parse > /dev/null 2>&1) if [[ $? != 0 ]]; then return 0 fi return 1 } function get_current_branch { echo $(git branch | grep "*" | awk '{print $NF}') } function auto_save_git { if [[ $(is_git ".") -ne 0 ]]; then echo "Current dir is not a git repository." return 1 fi current_branch_name=get_current_branch timestamp=`date +%Y_%m_%d_%H_%M_%S` new_branch_name="git_auto_save/$HOST/$timestamp" # check if there is unsaved work changes=`git status --ignore-submodules=dirty | grep -E 'modified|deleted|new'` if [[ ! $changes ]]; then echo "No changes found." return fi # stash changes git stash # create new branch git checkout -b $new_branch_name git push origin $new_branch_name # apply stashed changes git stash apply # add changed files git add -u # commit changes git commit -m "git autosave from $timestamp" # push changes git push --set-upstream origin $new_branch_name # move back to initial branch git checkout $current_branch_name } function remove_auto_save { if [[ $(is_git ".") -ne 0 ]]; then echo "Current dir is not a git repository." return 1 fi auto_save_branch=`git branch | grep "git_auto_save" | head -1 | awk '{print $FN}'` if [[ ! $auto_save_branch ]]; then echo "No auto save branch found." return fi auto_save_branch=${auto_save_branch:2} current_branch=$(get_current_branch) # if on autosave branch, move to master if [[ $current_branch == $auto_save_branch ]]; then echo "Currently on autosave path, moving to Master" git checkout master fi # remove local branch git branch -d $auto_save_branch # remove remote branch git push origin --delete $auto_save_branch } function remove_all_auto_saves { # remove all auto save branches if [[ $(is_git ".") -ne 0 ]]; then echo "Current dir is not a git repository." return 1 fi }