Added new aliases and plugins for git
authorjimmynotjim <jimmynotjim@me.com>
Wed, 27 Nov 2013 16:26:50 +0000 (11:26 -0500)
committerjimmynotjim <jimmynotjim@me.com>
Wed, 27 Nov 2013 16:26:50 +0000 (11:26 -0500)
aliases/available/git.aliases.bash
plugins/available/git.plugin.bash

index ab86853..d0dacbd 100644 (file)
@@ -5,6 +5,8 @@ about-alias 'common git abbreviations'
 alias gcl='git clone'
 alias ga='git add'
 alias gall='git add .'
+alias gus='git reset HEAD'
+alias gm="git merge"
 alias g='git'
 alias get='git'
 alias gst='git status'
@@ -19,6 +21,7 @@ alias gpo='git push origin'
 alias gdv='git diff -w "$@" | vim -R -'
 alias gc='git commit -v'
 alias gca='git commit -v -a'
+alias gcm='git commit -v -m'
 alias gci='git commit --interactive'
 alias gb='git branch'
 alias gba='git branch -a'
index 0b77111..533cc1d 100644 (file)
@@ -17,6 +17,100 @@ function git_first_push {
   git push origin master:refs/heads/master
 }
 
+function git_pub() {
+  about 'publishes current branch to remote origin'
+  group 'git'
+  BRANCH=$(git rev-parse --abbrev-ref HEAD)
+
+  echo "Publishing ${BRANCH} to remote origin"
+  git push -u origin $BRANCH
+}
+
+function add_branch() {
+  about 'adds & tracks a remote branch'
+  group 'git'
+
+  echo "Adding & tracking origin/${1}"
+  git checkout -b $1 origin/$1
+}
+
+function git_revert() {
+  about 'applies changes to HEAD that revert all changes after this commit'
+  group 'git'
+
+  git reset $1
+  git reset --soft HEAD@{1}
+  git commit -m "Revert to ${1}"
+  git reset --hard
+}
+
+function git_rollback() {
+  about 'resets the current HEAD to this commit'
+  group 'git'
+
+  function is_clean() {
+    if [[ $(git diff --shortstat 2> /dev/null | tail -n1) != "" ]]; then
+      echo "Your branch is dirty, please commit your changes"
+      kill -INT $$
+    fi
+  }
+
+  function commit_exists() {
+    git rev-list --quiet $1
+    status=$?
+    if [ $status -ne 0 ]; then
+      echo "Commit ${1} does not exist"
+      kill -INT $$
+    fi
+  }
+
+  function keep_changes() {
+    while true
+    do
+      read -p "Do you want to keep all changes from rolled back revisions in your working tree? [Y/N]" RESP
+      case $RESP
+      in
+      [yY])
+        echo "Rolling back to commit ${1} with unstaged changes"
+        git reset $1
+        break
+        ;;
+      [nN])
+        echo "Rolling back to commit ${1} with a clean working tree"
+        git reset --hard $1
+        break
+        ;;
+      *)
+        echo "Please enter Y or N"
+      esac
+    done
+  }
+
+  if [ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]; then
+    is_clean
+    commit_exists $1
+
+    while true
+    do
+      read -p "WARNING: This will change your history and move the current HEAD back to commit ${1}, continue? [Y/N]" RESP
+      case $RESP
+        in
+        [yY])
+          keep_changes $1
+          break
+          ;;
+        [nN])
+          break
+          ;;
+        *)
+          echo "Please enter Y or N"
+      esac
+    done
+  else
+    echo "you're currently not in a git repository"
+  fi
+}
+
 function git_remove_missing_files() {
   about "git rm's missing files"
   group 'git'